#include "cppdes/des.h"
#include "cppdes/des3.h"
#include "cppdes/descbc.h"

#include <cstdio>
#include <gtest/gtest.h>

ui64 desEncryptTest(ui64 key, ui64 input)
{
    DES des(key);
    ui64 output = des.encrypt(input);
    ui64 input2 = des.decrypt(output);

    printf("%016lX -> %016lX -> %016lX \n", input, output, input2);
    EXPECT_EQ(input, input2);

    return output;
}

TEST(cppDESTest, Test1)
{
    ui64 input = 0x9474B8E8C73BCA7D;
    for (int i = 0; i < 16; i++) {
        if (i % 2 == 0) {
            input = DES::encrypt(input, input);
            printf("E: %016lX\n", input);
        } else {
            input = DES::decrypt(input, input);
            printf("D: %016lX\n", input);
        }
    }
}

TEST(cppDESTest, Test2)
{
    ui64 input = 0x9474B8E8C73BCA7D;
    ui64 key = 0x0000000000000000;
    desEncryptTest(key, input);
}

TEST(cppDESTest, Test3)
{
    desEncryptTest(0x0000000000000000, 0x0000000000000000);
    desEncryptTest(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF);
}

TEST(cppDESTest, Test4)
{
    DES3 des(0x2BD6459F82C5B300, 0x952C49104881FF48, 0x2BD6459F82C5B300);
    ui64 input = 0x8598538A8ECF117D;

    ui64 result = des.encrypt(input);
    printf("E: %016lX\n", result);
    EXPECT_EQ(result, 0xEA024714AD5C4D84);

    result = des.decrypt(result);
    printf("D: %016lX\n", result);
    printf("P: %016lX\n", input);
    EXPECT_EQ(result, input);
}

TEST(cppDESTest, Test5)
{
    DESCBC des(0xFFFFFFFFFFFFFFFF, 0x0000000000000000);

    ui64 input1 = 0x0000000000000000;
    ui64 input2 = 0x0000000000000000;
    ui64 input3 = 0x0000000000000000;

    ui64 output1 = des.encrypt(input1);
    ui64 output2 = des.encrypt(input2);
    ui64 output3 = des.encrypt(input3);

    printf("P1: %016lX -> E1: %016lX \n", input1, output1);
    printf("P2: %016lX -> E2: %016lX \n", input2, output2);
    printf("P3: %016lX -> E3: %016lX \n", input3, output3);

    EXPECT_EQ(output1, 0xCAAAAF4DEAF1DBAE);
    EXPECT_EQ(output2, 0x0000000000000000);
    EXPECT_EQ(output3, 0xCAAAAF4DEAF1DBAE);
}

// Taken from: https://www.cosic.esat.kuleuven.be/nessie/testvectors/bc/des/Des-64-64.test-vectors
TEST(cppDESTest, Test6)
{
    EXPECT_TRUE(desEncryptTest(0x8000000000000000, 0x0000000000000000) == 0x95A8D72813DAA94D);
    EXPECT_TRUE(desEncryptTest(0x4000000000000000, 0x0000000000000000) == 0x0EEC1487DD8C26D5);
    EXPECT_TRUE(desEncryptTest(0x2000000000000000, 0x0000000000000000) == 0x7AD16FFB79C45926);
    EXPECT_TRUE(desEncryptTest(0x1000000000000000, 0x0000000000000000) == 0xD3746294CA6A6CF3);
    EXPECT_TRUE(desEncryptTest(0x0800000000000000, 0x0000000000000000) == 0x809F5F873C1FD761);
    EXPECT_TRUE(desEncryptTest(0x0400000000000000, 0x0000000000000000) == 0xC02FAFFEC989D1FC);
    EXPECT_TRUE(desEncryptTest(0x0200000000000000, 0x0000000000000000) == 0x4615AA1D33E72F10);
    EXPECT_TRUE(desEncryptTest(0x0100000000000000, 0x0000000000000000) == 0x8CA64DE9C1B123A7);
    EXPECT_TRUE(desEncryptTest(0x0080000000000000, 0x0000000000000000) == 0x2055123350C00858);
    EXPECT_TRUE(desEncryptTest(0x0040000000000000, 0x0000000000000000) == 0xDF3B99D6577397C8);
    EXPECT_TRUE(desEncryptTest(0x0020000000000000, 0x0000000000000000) == 0x31FE17369B5288C9);
    EXPECT_TRUE(desEncryptTest(0x0010000000000000, 0x0000000000000000) == 0xDFDD3CC64DAE1642);
    EXPECT_TRUE(desEncryptTest(0x0008000000000000, 0x0000000000000000) == 0x178C83CE2B399D94);
    EXPECT_TRUE(desEncryptTest(0x0004000000000000, 0x0000000000000000) == 0x50F636324A9B7F80);
    EXPECT_TRUE(desEncryptTest(0x0002000000000000, 0x0000000000000000) == 0xA8468EE3BC18F06D);
    EXPECT_TRUE(desEncryptTest(0x0001000000000000, 0x0000000000000000) == 0x8CA64DE9C1B123A7);
    EXPECT_TRUE(desEncryptTest(0x0000800000000000, 0x0000000000000000) == 0xA2DC9E92FD3CDE92);
    EXPECT_TRUE(desEncryptTest(0x0000400000000000, 0x0000000000000000) == 0xCAC09F797D031287);
    EXPECT_TRUE(desEncryptTest(0x0000200000000000, 0x0000000000000000) == 0x90BA680B22AEB525);
    EXPECT_TRUE(desEncryptTest(0x0000100000000000, 0x0000000000000000) == 0xCE7A24F350E280B6);
    EXPECT_TRUE(desEncryptTest(0x0000080000000000, 0x0000000000000000) == 0x882BFF0AA01A0B87);
    EXPECT_TRUE(desEncryptTest(0x0000040000000000, 0x0000000000000000) == 0x25610288924511C2);
    EXPECT_TRUE(desEncryptTest(0x0000020000000000, 0x0000000000000000) == 0xC71516C29C75D170);
    EXPECT_TRUE(desEncryptTest(0x0000010000000000, 0x0000000000000000) == 0x8CA64DE9C1B123A7);
    EXPECT_TRUE(desEncryptTest(0x0000008000000000, 0x0000000000000000) == 0x5199C29A52C9F059);
    EXPECT_TRUE(desEncryptTest(0x0000004000000000, 0x0000000000000000) == 0xC22F0A294A71F29F);
    EXPECT_TRUE(desEncryptTest(0x0000002000000000, 0x0000000000000000) == 0xEE371483714C02EA);
    EXPECT_TRUE(desEncryptTest(0x0000001000000000, 0x0000000000000000) == 0xA81FBD448F9E522F);
    EXPECT_TRUE(desEncryptTest(0x0000000800000000, 0x0000000000000000) == 0x4F644C92E192DFED);
    EXPECT_TRUE(desEncryptTest(0x0000000400000000, 0x0000000000000000) == 0x1AFA9A66A6DF92AE);
    EXPECT_TRUE(desEncryptTest(0x0000000200000000, 0x0000000000000000) == 0xB3C1CC715CB879D8);
    EXPECT_TRUE(desEncryptTest(0x0000000100000000, 0x0000000000000000) == 0x8CA64DE9C1B123A7);
    EXPECT_TRUE(desEncryptTest(0x0000000080000000, 0x0000000000000000) == 0x19D032E64AB0BD8B);
    EXPECT_TRUE(desEncryptTest(0x0000000040000000, 0x0000000000000000) == 0x3CFAA7A7DC8720DC);
    EXPECT_TRUE(desEncryptTest(0x0000000020000000, 0x0000000000000000) == 0xB7265F7F447AC6F3);
    EXPECT_TRUE(desEncryptTest(0x0000000010000000, 0x0000000000000000) == 0x9DB73B3C0D163F54);
    EXPECT_TRUE(desEncryptTest(0x0000000008000000, 0x0000000000000000) == 0x8181B65BABF4A975);
    EXPECT_TRUE(desEncryptTest(0x0000000004000000, 0x0000000000000000) == 0x93C9B64042EAA240);
    EXPECT_TRUE(desEncryptTest(0x0000000002000000, 0x0000000000000000) == 0x5570530829705592);
    EXPECT_TRUE(desEncryptTest(0x0000000001000000, 0x0000000000000000) == 0x8CA64DE9C1B123A7);
    EXPECT_TRUE(desEncryptTest(0x0000000000800000, 0x0000000000000000) == 0x8638809E878787A0);
    EXPECT_TRUE(desEncryptTest(0x0000000000400000, 0x0000000000000000) == 0x41B9A79AF79AC208);
    EXPECT_TRUE(desEncryptTest(0x0000000000200000, 0x0000000000000000) == 0x7A9BE42F2009A892);
    EXPECT_TRUE(desEncryptTest(0x0000000000100000, 0x0000000000000000) == 0x29038D56BA6D2745);
    EXPECT_TRUE(desEncryptTest(0x0000000000080000, 0x0000000000000000) == 0x5495C6ABF1E5DF51);
    EXPECT_TRUE(desEncryptTest(0x0000000000040000, 0x0000000000000000) == 0xAE13DBD561488933);
    EXPECT_TRUE(desEncryptTest(0x0000000000020000, 0x0000000000000000) == 0x024D1FFA8904E389);
    EXPECT_TRUE(desEncryptTest(0x0000000000010000, 0x0000000000000000) == 0x8CA64DE9C1B123A7);
    EXPECT_TRUE(desEncryptTest(0x0000000000008000, 0x0000000000000000) == 0xD1399712F99BF02E);
    EXPECT_TRUE(desEncryptTest(0x0000000000004000, 0x0000000000000000) == 0x14C1D7C1CFFEC79E);
    EXPECT_TRUE(desEncryptTest(0x0000000000002000, 0x0000000000000000) == 0x1DE5279DAE3BED6F);
    EXPECT_TRUE(desEncryptTest(0x0000000000001000, 0x0000000000000000) == 0xE941A33F85501303);
    EXPECT_TRUE(desEncryptTest(0x0000000000000800, 0x0000000000000000) == 0xDA99DBBC9A03F379);
    EXPECT_TRUE(desEncryptTest(0x0000000000000400, 0x0000000000000000) == 0xB7FC92F91D8E92E9);
    EXPECT_TRUE(desEncryptTest(0x0000000000000200, 0x0000000000000000) == 0xAE8E5CAA3CA04E85);
    EXPECT_TRUE(desEncryptTest(0x0000000000000100, 0x0000000000000000) == 0x8CA64DE9C1B123A7);
    EXPECT_TRUE(desEncryptTest(0x0000000000000080, 0x0000000000000000) == 0x9CC62DF43B6EED74);
    EXPECT_TRUE(desEncryptTest(0x0000000000000040, 0x0000000000000000) == 0xD863DBB5C59A91A0);
    EXPECT_TRUE(desEncryptTest(0x0000000000000020, 0x0000000000000000) == 0xA1AB2190545B91D7);
    EXPECT_TRUE(desEncryptTest(0x0000000000000010, 0x0000000000000000) == 0x0875041E64C570F7);
    EXPECT_TRUE(desEncryptTest(0x0000000000000008, 0x0000000000000000) == 0x5A594528BEBEF1CC);
    EXPECT_TRUE(desEncryptTest(0x0000000000000004, 0x0000000000000000) == 0xFCDB3291DE21F0C0);
    EXPECT_TRUE(desEncryptTest(0x0000000000000002, 0x0000000000000000) == 0x869EFD7F9F265A09);
    EXPECT_TRUE(desEncryptTest(0x0000000000000001, 0x0000000000000000) == 0x8CA64DE9C1B123A7);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x8000000000000000) == 0x95F8A5E5DD31D900);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x4000000000000000) == 0xDD7F121CA5015619);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x2000000000000000) == 0x2E8653104F3834EA);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x1000000000000000) == 0x4BD388FF6CD81D4F);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0800000000000000) == 0x20B9E767B2FB1456);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0400000000000000) == 0x55579380D77138EF);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0200000000000000) == 0x6CC5DEFAAF04512F);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0100000000000000) == 0x0D9F279BA5D87260);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0080000000000000) == 0xD9031B0271BD5A0A);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0040000000000000) == 0x424250B37C3DD951);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0020000000000000) == 0xB8061B7ECD9A21E5);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0010000000000000) == 0xF15D0F286B65BD28);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0008000000000000) == 0xADD0CC8D6E5DEBA1);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0004000000000000) == 0xE6D5F82752AD63D1);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0002000000000000) == 0xECBFE3BD3F591A5E);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0001000000000000) == 0xF356834379D165CD);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000800000000000) == 0x2B9F982F20037FA9);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000400000000000) == 0x889DE068A16F0BE6);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000200000000000) == 0xE19E275D846A1298);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000100000000000) == 0x329A8ED523D71AEC);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000080000000000) == 0xE7FCE22557D23C97);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000040000000000) == 0x12A9F5817FF2D65D);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000020000000000) == 0xA484C3AD38DC9C19);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000010000000000) == 0xFBE00A8A1EF8AD72);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000008000000000) == 0x750D079407521363);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000004000000000) == 0x64FEED9C724C2FAF);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000002000000000) == 0xF02B263B328E2B60);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000001000000000) == 0x9D64555A9A10B852);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000800000000) == 0xD106FF0BED5255D7);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000400000000) == 0xE1652C6B138C64A5);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000200000000) == 0xE428581186EC8F46);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000100000000) == 0xAEB5F5EDE22D1A36);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000080000000) == 0xE943D7568AEC0C5C);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000040000000) == 0xDF98C8276F54B04B);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000020000000) == 0xB160E4680F6C696F);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000010000000) == 0xFA0752B07D9C4AB8);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000008000000) == 0xCA3A2B036DBC8502);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000004000000) == 0x5E0905517BB59BCF);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000002000000) == 0x814EEB3B91D90726);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000001000000) == 0x4D49DB1532919C9F);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000800000) == 0x25EB5FC3F8CF0621);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000400000) == 0xAB6A20C0620D1C6F);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000200000) == 0x79E90DBC98F92CCA);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000100000) == 0x866ECEDD8072BB0E);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000080000) == 0x8B54536F2F3E64A8);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000040000) == 0xEA51D3975595B86B);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000020000) == 0xCAFFC6AC4542DE31);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000010000) == 0x8DD45A2DDF90796C);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000008000) == 0x1029D55E880EC2D0);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000004000) == 0x5D86CB23639DBEA9);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000002000) == 0x1D1CA853AE7C0C5F);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000001000) == 0xCE332329248F3228);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000000800) == 0x8405D1ABE24FB942);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000000400) == 0xE643D78090CA4207);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000000200) == 0x48221B9937748A23);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000000100) == 0xDD7C0BBD61FAFD54);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000000080) == 0x2FBC291A570DB5C4);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000000040) == 0xE07C30D7E4E26E12);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000000020) == 0x0953E2258E8E90A1);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000000010) == 0x5B711BC4CEEBF2EE);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000000008) == 0xCC083F1E6D9E85F6);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000000004) == 0xD2FD8867D50D2DFE);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000000002) == 0x06E7EA22CE92708F);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000000001) == 0x166B40B44ABA4BD6);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0000000000000000) == 0x8CA64DE9C1B123A7);
    EXPECT_TRUE(desEncryptTest(0x0101010101010101, 0x0101010101010101) == 0x994D4DC157B96C52);
    EXPECT_TRUE(desEncryptTest(0x0202020202020202, 0x0202020202020202) == 0xE127C2B61D98E6E2);
    EXPECT_TRUE(desEncryptTest(0x0303030303030303, 0x0303030303030303) == 0x984C91D78A269CE3);
    EXPECT_TRUE(desEncryptTest(0x0404040404040404, 0x0404040404040404) == 0x1F4570BB77550683);
    EXPECT_TRUE(desEncryptTest(0x0505050505050505, 0x0505050505050505) == 0x3990ABF98D672B16);
    EXPECT_TRUE(desEncryptTest(0x0606060606060606, 0x0606060606060606) == 0x3F5150BBA081D585);
    EXPECT_TRUE(desEncryptTest(0x0707070707070707, 0x0707070707070707) == 0xC65242248C9CF6F2);
    EXPECT_TRUE(desEncryptTest(0x0808080808080808, 0x0808080808080808) == 0x10772D40FAD24257);
    EXPECT_TRUE(desEncryptTest(0x0909090909090909, 0x0909090909090909) == 0xF0139440647A6E7B);
    EXPECT_TRUE(desEncryptTest(0x0A0A0A0A0A0A0A0A, 0x0A0A0A0A0A0A0A0A) == 0x0A288603044D740C);
    EXPECT_TRUE(desEncryptTest(0x0B0B0B0B0B0B0B0B, 0x0B0B0B0B0B0B0B0B) == 0x6359916942F7438F);
    EXPECT_TRUE(desEncryptTest(0x0C0C0C0C0C0C0C0C, 0x0C0C0C0C0C0C0C0C) == 0x934316AE443CF08B);
    EXPECT_TRUE(desEncryptTest(0x0D0D0D0D0D0D0D0D, 0x0D0D0D0D0D0D0D0D) == 0xE3F56D7F1130A2B7);
    EXPECT_TRUE(desEncryptTest(0x0E0E0E0E0E0E0E0E, 0x0E0E0E0E0E0E0E0E) == 0xA2E4705087C6B6B4);
    EXPECT_TRUE(desEncryptTest(0x0F0F0F0F0F0F0F0F, 0x0F0F0F0F0F0F0F0F) == 0xD5D76E09A447E8C3);
    EXPECT_TRUE(desEncryptTest(0x1010101010101010, 0x1010101010101010) == 0xDD7515F2BFC17F85);
    EXPECT_TRUE(desEncryptTest(0x1111111111111111, 0x1111111111111111) == 0xF40379AB9E0EC533);
    EXPECT_TRUE(desEncryptTest(0x1212121212121212, 0x1212121212121212) == 0x96CD27784D1563E5);
    EXPECT_TRUE(desEncryptTest(0x1313131313131313, 0x1313131313131313) == 0x2911CF5E94D33FE1);
    EXPECT_TRUE(desEncryptTest(0x1414141414141414, 0x1414141414141414) == 0x377B7F7CA3E5BBB3);
    EXPECT_TRUE(desEncryptTest(0x1515151515151515, 0x1515151515151515) == 0x701AA63832905A92);
    EXPECT_TRUE(desEncryptTest(0x1616161616161616, 0x1616161616161616) == 0x2006E716C4252D6D);
    EXPECT_TRUE(desEncryptTest(0x1717171717171717, 0x1717171717171717) == 0x452C1197422469F8);
    EXPECT_TRUE(desEncryptTest(0x1818181818181818, 0x1818181818181818) == 0xC33FD1EB49CB64DA);
    EXPECT_TRUE(desEncryptTest(0x1919191919191919, 0x1919191919191919) == 0x7572278F364EB50D);
    EXPECT_TRUE(desEncryptTest(0x1A1A1A1A1A1A1A1A, 0x1A1A1A1A1A1A1A1A) == 0x69E51488403EF4C3);
    EXPECT_TRUE(desEncryptTest(0x1B1B1B1B1B1B1B1B, 0x1B1B1B1B1B1B1B1B) == 0xFF847E0ADF192825);
    EXPECT_TRUE(desEncryptTest(0x1C1C1C1C1C1C1C1C, 0x1C1C1C1C1C1C1C1C) == 0x521B7FB3B41BB791);
    EXPECT_TRUE(desEncryptTest(0x1D1D1D1D1D1D1D1D, 0x1D1D1D1D1D1D1D1D) == 0x26059A6A0F3F6B35);
    EXPECT_TRUE(desEncryptTest(0x1E1E1E1E1E1E1E1E, 0x1E1E1E1E1E1E1E1E) == 0xF24A8D2231C77538);
    EXPECT_TRUE(desEncryptTest(0x1F1F1F1F1F1F1F1F, 0x1F1F1F1F1F1F1F1F) == 0x4FD96EC0D3304EF6);
    EXPECT_TRUE(desEncryptTest(0x2020202020202020, 0x2020202020202020) == 0x18A9D580A900B699);
    EXPECT_TRUE(desEncryptTest(0x2121212121212121, 0x2121212121212121) == 0x88586E1D755B9B5A);
    EXPECT_TRUE(desEncryptTest(0x2222222222222222, 0x2222222222222222) == 0x0F8ADFFB11DC2784);
    EXPECT_TRUE(desEncryptTest(0x2323232323232323, 0x2323232323232323) == 0x2F30446C8312404A);
    EXPECT_TRUE(desEncryptTest(0x2424242424242424, 0x2424242424242424) == 0x0BA03D9E6C196511);
    EXPECT_TRUE(desEncryptTest(0x2525252525252525, 0x2525252525252525) == 0x3E55E997611E4B7D);
    EXPECT_TRUE(desEncryptTest(0x2626262626262626, 0x2626262626262626) == 0xB2522FB5F158F0DF);
    EXPECT_TRUE(desEncryptTest(0x2727272727272727, 0x2727272727272727) == 0x2109425935406AB8);
    EXPECT_TRUE(desEncryptTest(0x2828282828282828, 0x2828282828282828) == 0x11A16028F310FF16);
    EXPECT_TRUE(desEncryptTest(0x2929292929292929, 0x2929292929292929) == 0x73F0C45F379FE67F);
    EXPECT_TRUE(desEncryptTest(0x2A2A2A2A2A2A2A2A, 0x2A2A2A2A2A2A2A2A) == 0xDCAD4338F7523816);
    EXPECT_TRUE(desEncryptTest(0x2B2B2B2B2B2B2B2B, 0x2B2B2B2B2B2B2B2B) == 0xB81634C1CEAB298C);
    EXPECT_TRUE(desEncryptTest(0x2C2C2C2C2C2C2C2C, 0x2C2C2C2C2C2C2C2C) == 0xDD2CCB29B6C4C349);
    EXPECT_TRUE(desEncryptTest(0x2D2D2D2D2D2D2D2D, 0x2D2D2D2D2D2D2D2D) == 0x7D07A77A2ABD50A7);
    EXPECT_TRUE(desEncryptTest(0x2E2E2E2E2E2E2E2E, 0x2E2E2E2E2E2E2E2E) == 0x30C1B0C1FD91D371);
    EXPECT_TRUE(desEncryptTest(0x2F2F2F2F2F2F2F2F, 0x2F2F2F2F2F2F2F2F) == 0xC4427B31AC61973B);
    EXPECT_TRUE(desEncryptTest(0x3030303030303030, 0x3030303030303030) == 0xF47BB46273B15EB5);
    EXPECT_TRUE(desEncryptTest(0x3131313131313131, 0x3131313131313131) == 0x655EA628CF62585F);
    EXPECT_TRUE(desEncryptTest(0x3232323232323232, 0x3232323232323232) == 0xAC978C247863388F);
    EXPECT_TRUE(desEncryptTest(0x3333333333333333, 0x3333333333333333) == 0x0432ED386F2DE328);
    EXPECT_TRUE(desEncryptTest(0x3434343434343434, 0x3434343434343434) == 0xD254014CB986B3C2);
    EXPECT_TRUE(desEncryptTest(0x3535353535353535, 0x3535353535353535) == 0xB256E34BEDB49801);
    EXPECT_TRUE(desEncryptTest(0x3636363636363636, 0x3636363636363636) == 0x37F8759EB77E7BFC);
    EXPECT_TRUE(desEncryptTest(0x3737373737373737, 0x3737373737373737) == 0x5013CA4F62C9CEA0);
    EXPECT_TRUE(desEncryptTest(0x3838383838383838, 0x3838383838383838) == 0x8940F7B3EACA5939);
    EXPECT_TRUE(desEncryptTest(0x3939393939393939, 0x3939393939393939) == 0xE22B19A55086774B);
    EXPECT_TRUE(desEncryptTest(0x3A3A3A3A3A3A3A3A, 0x3A3A3A3A3A3A3A3A) == 0xB04A2AAC925ABB0B);
    EXPECT_TRUE(desEncryptTest(0x3B3B3B3B3B3B3B3B, 0x3B3B3B3B3B3B3B3B) == 0x8D250D58361597FC);
    EXPECT_TRUE(desEncryptTest(0x3C3C3C3C3C3C3C3C, 0x3C3C3C3C3C3C3C3C) == 0x51F0114FB6A6CD37);
    EXPECT_TRUE(desEncryptTest(0x3D3D3D3D3D3D3D3D, 0x3D3D3D3D3D3D3D3D) == 0x9D0BB4DB830ECB73);
    EXPECT_TRUE(desEncryptTest(0x3E3E3E3E3E3E3E3E, 0x3E3E3E3E3E3E3E3E) == 0xE96089D6368F3E1A);
    EXPECT_TRUE(desEncryptTest(0x3F3F3F3F3F3F3F3F, 0x3F3F3F3F3F3F3F3F) == 0x5C4CA877A4E1E92D);
    EXPECT_TRUE(desEncryptTest(0x4040404040404040, 0x4040404040404040) == 0x6D55DDBC8DEA95FF);
    EXPECT_TRUE(desEncryptTest(0x4141414141414141, 0x4141414141414141) == 0x19DF84AC95551003);
    EXPECT_TRUE(desEncryptTest(0x4242424242424242, 0x4242424242424242) == 0x724E7332696D08A7);
    EXPECT_TRUE(desEncryptTest(0x4343434343434343, 0x4343434343434343) == 0xB91810B8CDC58FE2);
    EXPECT_TRUE(desEncryptTest(0x4444444444444444, 0x4444444444444444) == 0x06E23526EDCCD0C4);
    EXPECT_TRUE(desEncryptTest(0x4545454545454545, 0x4545454545454545) == 0xEF52491D5468D441);
    EXPECT_TRUE(desEncryptTest(0x4646464646464646, 0x4646464646464646) == 0x48019C59E39B90C5);
    EXPECT_TRUE(desEncryptTest(0x4747474747474747, 0x4747474747474747) == 0x0544083FB902D8C0);
    EXPECT_TRUE(desEncryptTest(0x4848484848484848, 0x4848484848484848) == 0x63B15CADA668CE12);
    EXPECT_TRUE(desEncryptTest(0x4949494949494949, 0x4949494949494949) == 0xEACC0C1264171071);
    EXPECT_TRUE(desEncryptTest(0x4A4A4A4A4A4A4A4A, 0x4A4A4A4A4A4A4A4A) == 0x9D2B8C0AC605F274);
    EXPECT_TRUE(desEncryptTest(0x4B4B4B4B4B4B4B4B, 0x4B4B4B4B4B4B4B4B) == 0xC90F2F4C98A8FB2A);
    EXPECT_TRUE(desEncryptTest(0x4C4C4C4C4C4C4C4C, 0x4C4C4C4C4C4C4C4C) == 0x03481B4828FD1D04);
    EXPECT_TRUE(desEncryptTest(0x4D4D4D4D4D4D4D4D, 0x4D4D4D4D4D4D4D4D) == 0xC78FC45A1DCEA2E2);
    EXPECT_TRUE(desEncryptTest(0x4E4E4E4E4E4E4E4E, 0x4E4E4E4E4E4E4E4E) == 0xDB96D88C3460D801);
    EXPECT_TRUE(desEncryptTest(0x4F4F4F4F4F4F4F4F, 0x4F4F4F4F4F4F4F4F) == 0x6C69E720F5105518);
    EXPECT_TRUE(desEncryptTest(0x5050505050505050, 0x5050505050505050) == 0x0D262E418BC893F3);
    EXPECT_TRUE(desEncryptTest(0x5151515151515151, 0x5151515151515151) == 0x6AD84FD7848A0A5C);
    EXPECT_TRUE(desEncryptTest(0x5252525252525252, 0x5252525252525252) == 0xC365CB35B34B6114);
    EXPECT_TRUE(desEncryptTest(0x5353535353535353, 0x5353535353535353) == 0x1155392E877F42A9);
    EXPECT_TRUE(desEncryptTest(0x5454545454545454, 0x5454545454545454) == 0x531BE5F9405DA715);
    EXPECT_TRUE(desEncryptTest(0x5555555555555555, 0x5555555555555555) == 0x3BCDD41E6165A5E8);
    EXPECT_TRUE(desEncryptTest(0x5656565656565656, 0x5656565656565656) == 0x2B1FF5610A19270C);
    EXPECT_TRUE(desEncryptTest(0x5757575757575757, 0x5757575757575757) == 0xD90772CF3F047CFD);
    EXPECT_TRUE(desEncryptTest(0x5858585858585858, 0x5858585858585858) == 0x1BEA27FFB72457B7);
    EXPECT_TRUE(desEncryptTest(0x5959595959595959, 0x5959595959595959) == 0x85C3E0C429F34C27);
    EXPECT_TRUE(desEncryptTest(0x5A5A5A5A5A5A5A5A, 0x5A5A5A5A5A5A5A5A) == 0xF9038021E37C7618);
    EXPECT_TRUE(desEncryptTest(0x5B5B5B5B5B5B5B5B, 0x5B5B5B5B5B5B5B5B) == 0x35BC6FF838DBA32F);
    EXPECT_TRUE(desEncryptTest(0x5C5C5C5C5C5C5C5C, 0x5C5C5C5C5C5C5C5C) == 0x4927ACC8CE45ECE7);
    EXPECT_TRUE(desEncryptTest(0x5D5D5D5D5D5D5D5D, 0x5D5D5D5D5D5D5D5D) == 0xE812EE6E3572985C);
    EXPECT_TRUE(desEncryptTest(0x5E5E5E5E5E5E5E5E, 0x5E5E5E5E5E5E5E5E) == 0x9BB93A89627BF65F);
    EXPECT_TRUE(desEncryptTest(0x5F5F5F5F5F5F5F5F, 0x5F5F5F5F5F5F5F5F) == 0xEF12476884CB74CA);
    EXPECT_TRUE(desEncryptTest(0x6060606060606060, 0x6060606060606060) == 0x1BF17E00C09E7CBF);
    EXPECT_TRUE(desEncryptTest(0x6161616161616161, 0x6161616161616161) == 0x29932350C098DB5D);
    EXPECT_TRUE(desEncryptTest(0x6262626262626262, 0x6262626262626262) == 0xB476E6499842AC54);
    EXPECT_TRUE(desEncryptTest(0x6363636363636363, 0x6363636363636363) == 0x5C662C29C1E96056);
    EXPECT_TRUE(desEncryptTest(0x6464646464646464, 0x6464646464646464) == 0x3AF1703D76442789);
    EXPECT_TRUE(desEncryptTest(0x6565656565656565, 0x6565656565656565) == 0x86405D9B425A8C8C);
    EXPECT_TRUE(desEncryptTest(0x6666666666666666, 0x6666666666666666) == 0xEBBF4810619C2C55);
    EXPECT_TRUE(desEncryptTest(0x6767676767676767, 0x6767676767676767) == 0xF8D1CD7367B21B5D);
    EXPECT_TRUE(desEncryptTest(0x6868686868686868, 0x6868686868686868) == 0x9EE703142BF8D7E2);
    EXPECT_TRUE(desEncryptTest(0x6969696969696969, 0x6969696969696969) == 0x5FDFFFC3AAAB0CB3);
    EXPECT_TRUE(desEncryptTest(0x6A6A6A6A6A6A6A6A, 0x6A6A6A6A6A6A6A6A) == 0x26C940AB13574231);
    EXPECT_TRUE(desEncryptTest(0x6B6B6B6B6B6B6B6B, 0x6B6B6B6B6B6B6B6B) == 0x1E2DC77E36A84693);
    EXPECT_TRUE(desEncryptTest(0x6C6C6C6C6C6C6C6C, 0x6C6C6C6C6C6C6C6C) == 0x0F4FF4D9BC7E2244);
    EXPECT_TRUE(desEncryptTest(0x6D6D6D6D6D6D6D6D, 0x6D6D6D6D6D6D6D6D) == 0xA4C9A0D04D3280CD);
    EXPECT_TRUE(desEncryptTest(0x6E6E6E6E6E6E6E6E, 0x6E6E6E6E6E6E6E6E) == 0x9FAF2C96FE84919D);
    EXPECT_TRUE(desEncryptTest(0x6F6F6F6F6F6F6F6F, 0x6F6F6F6F6F6F6F6F) == 0x115DBC965E6096C8);
    EXPECT_TRUE(desEncryptTest(0x7070707070707070, 0x7070707070707070) == 0xAF531E9520994017);
    EXPECT_TRUE(desEncryptTest(0x7171717171717171, 0x7171717171717171) == 0xB971ADE70E5C89EE);
    EXPECT_TRUE(desEncryptTest(0x7272727272727272, 0x7272727272727272) == 0x415D81C86AF9C376);
    EXPECT_TRUE(desEncryptTest(0x7373737373737373, 0x7373737373737373) == 0x8DFB864FDB3C6811);
    EXPECT_TRUE(desEncryptTest(0x7474747474747474, 0x7474747474747474) == 0x10B1C170E3398F91);
    EXPECT_TRUE(desEncryptTest(0x7575757575757575, 0x7575757575757575) == 0xCFEF7A1C0218DB1E);
    EXPECT_TRUE(desEncryptTest(0x7676767676767676, 0x7676767676767676) == 0xDBAC30A2A40B1B9C);
    EXPECT_TRUE(desEncryptTest(0x7777777777777777, 0x7777777777777777) == 0x89D3BF37052162E9);
    EXPECT_TRUE(desEncryptTest(0x7878787878787878, 0x7878787878787878) == 0x80D9230BDAEB67DC);
    EXPECT_TRUE(desEncryptTest(0x7979797979797979, 0x7979797979797979) == 0x3440911019AD68D7);
    EXPECT_TRUE(desEncryptTest(0x7A7A7A7A7A7A7A7A, 0x7A7A7A7A7A7A7A7A) == 0x9626FE57596E199E);
    EXPECT_TRUE(desEncryptTest(0x7B7B7B7B7B7B7B7B, 0x7B7B7B7B7B7B7B7B) == 0xDEA0B796624BB5BA);
    EXPECT_TRUE(desEncryptTest(0x7C7C7C7C7C7C7C7C, 0x7C7C7C7C7C7C7C7C) == 0xE9E40542BDDB3E9D);
    EXPECT_TRUE(desEncryptTest(0x7D7D7D7D7D7D7D7D, 0x7D7D7D7D7D7D7D7D) == 0x8AD99914B354B911);
    EXPECT_TRUE(desEncryptTest(0x7E7E7E7E7E7E7E7E, 0x7E7E7E7E7E7E7E7E) == 0x6F85B98DD12CB13B);
    EXPECT_TRUE(desEncryptTest(0x7F7F7F7F7F7F7F7F, 0x7F7F7F7F7F7F7F7F) == 0x10130DA3C3A23924);
    EXPECT_TRUE(desEncryptTest(0x8080808080808080, 0x8080808080808080) == 0xEFECF25C3C5DC6DB);
    EXPECT_TRUE(desEncryptTest(0x8181818181818181, 0x8181818181818181) == 0x907A46722ED34EC4);
    EXPECT_TRUE(desEncryptTest(0x8282828282828282, 0x8282828282828282) == 0x752666EB4CAB46EE);
    EXPECT_TRUE(desEncryptTest(0x8383838383838383, 0x8383838383838383) == 0x161BFABD4224C162);
    EXPECT_TRUE(desEncryptTest(0x8484848484848484, 0x8484848484848484) == 0x215F48699DB44A45);
    EXPECT_TRUE(desEncryptTest(0x8585858585858585, 0x8585858585858585) == 0x69D901A8A691E661);
    EXPECT_TRUE(desEncryptTest(0x8686868686868686, 0x8686868686868686) == 0xCBBF6EEFE6529728);
    EXPECT_TRUE(desEncryptTest(0x8787878787878787, 0x8787878787878787) == 0x7F26DCF425149823);
    EXPECT_TRUE(desEncryptTest(0x8888888888888888, 0x8888888888888888) == 0x762C40C8FADE9D16);
    EXPECT_TRUE(desEncryptTest(0x8989898989898989, 0x8989898989898989) == 0x2453CF5D5BF4E463);
    EXPECT_TRUE(desEncryptTest(0x8A8A8A8A8A8A8A8A, 0x8A8A8A8A8A8A8A8A) == 0x301085E3FDE724E1);
    EXPECT_TRUE(desEncryptTest(0x8B8B8B8B8B8B8B8B, 0x8B8B8B8B8B8B8B8B) == 0xEF4E3E8F1CC6706E);
    EXPECT_TRUE(desEncryptTest(0x8C8C8C8C8C8C8C8C, 0x8C8C8C8C8C8C8C8C) == 0x720479B024C397EE);
    EXPECT_TRUE(desEncryptTest(0x8D8D8D8D8D8D8D8D, 0x8D8D8D8D8D8D8D8D) == 0xBEA27E3795063C89);
    EXPECT_TRUE(desEncryptTest(0x8E8E8E8E8E8E8E8E, 0x8E8E8E8E8E8E8E8E) == 0x468E5218F1A37611);
    EXPECT_TRUE(desEncryptTest(0x8F8F8F8F8F8F8F8F, 0x8F8F8F8F8F8F8F8F) == 0x50ACE16ADF66BFE8);
    EXPECT_TRUE(desEncryptTest(0x9090909090909090, 0x9090909090909090) == 0xEEA24369A19F6937);
    EXPECT_TRUE(desEncryptTest(0x9191919191919191, 0x9191919191919191) == 0x6050D369017B6E62);
    EXPECT_TRUE(desEncryptTest(0x9292929292929292, 0x9292929292929292) == 0x5B365F2FB2CD7F32);
    EXPECT_TRUE(desEncryptTest(0x9393939393939393, 0x9393939393939393) == 0xF0B00B264381DDBB);
    EXPECT_TRUE(desEncryptTest(0x9494949494949494, 0x9494949494949494) == 0xE1D23881C957B96C);
    EXPECT_TRUE(desEncryptTest(0x9595959595959595, 0x9595959595959595) == 0xD936BF54ECA8BDCE);
    EXPECT_TRUE(desEncryptTest(0x9696969696969696, 0x9696969696969696) == 0xA020003C5554F34C);
    EXPECT_TRUE(desEncryptTest(0x9797979797979797, 0x9797979797979797) == 0x6118FCEBD407281D);
    EXPECT_TRUE(desEncryptTest(0x9898989898989898, 0x9898989898989898) == 0x072E328C984DE4A2);
    EXPECT_TRUE(desEncryptTest(0x9999999999999999, 0x9999999999999999) == 0x1440B7EF9E63D3AA);
    EXPECT_TRUE(desEncryptTest(0x9A9A9A9A9A9A9A9A, 0x9A9A9A9A9A9A9A9A) == 0x79BFA264BDA57373);
    EXPECT_TRUE(desEncryptTest(0x9B9B9B9B9B9B9B9B, 0x9B9B9B9B9B9B9B9B) == 0xC50E8FC289BBD876);
    EXPECT_TRUE(desEncryptTest(0x9C9C9C9C9C9C9C9C, 0x9C9C9C9C9C9C9C9C) == 0xA399D3D63E169FA9);
    EXPECT_TRUE(desEncryptTest(0x9D9D9D9D9D9D9D9D, 0x9D9D9D9D9D9D9D9D) == 0x4B8919B667BD53AB);
    EXPECT_TRUE(desEncryptTest(0x9E9E9E9E9E9E9E9E, 0x9E9E9E9E9E9E9E9E) == 0xD66CDCAF3F6724A2);
    EXPECT_TRUE(desEncryptTest(0x9F9F9F9F9F9F9F9F, 0x9F9F9F9F9F9F9F9F) == 0xE40E81FF3F618340);
    EXPECT_TRUE(desEncryptTest(0xA0A0A0A0A0A0A0A0, 0xA0A0A0A0A0A0A0A0) == 0x10EDB8977B348B35);
    EXPECT_TRUE(desEncryptTest(0xA1A1A1A1A1A1A1A1, 0xA1A1A1A1A1A1A1A1) == 0x6446C5769D8409A0);
    EXPECT_TRUE(desEncryptTest(0xA2A2A2A2A2A2A2A2, 0xA2A2A2A2A2A2A2A2) == 0x17ED1191CA8D67A3);
    EXPECT_TRUE(desEncryptTest(0xA3A3A3A3A3A3A3A3, 0xA3A3A3A3A3A3A3A3) == 0xB6D8533731BA1318);
    EXPECT_TRUE(desEncryptTest(0xA4A4A4A4A4A4A4A4, 0xA4A4A4A4A4A4A4A4) == 0xCA439007C7245CD0);
    EXPECT_TRUE(desEncryptTest(0xA5A5A5A5A5A5A5A5, 0xA5A5A5A5A5A5A5A5) == 0x06FC7FDE1C8389E7);
    EXPECT_TRUE(desEncryptTest(0xA6A6A6A6A6A6A6A6, 0xA6A6A6A6A6A6A6A6) == 0x7A3C1F3BD60CB3D8);
    EXPECT_TRUE(desEncryptTest(0xA7A7A7A7A7A7A7A7, 0xA7A7A7A7A7A7A7A7) == 0xE415D80048DBA848);
    EXPECT_TRUE(desEncryptTest(0xA8A8A8A8A8A8A8A8, 0xA8A8A8A8A8A8A8A8) == 0x26F88D30C0FB8302);
    EXPECT_TRUE(desEncryptTest(0xA9A9A9A9A9A9A9A9, 0xA9A9A9A9A9A9A9A9) == 0xD4E00A9EF5E6D8F3);
    EXPECT_TRUE(desEncryptTest(0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA) == 0xC4322BE19E9A5A17);
    EXPECT_TRUE(desEncryptTest(0xABABABABABABABAB, 0xABABABABABABABAB) == 0xACE41A06BFA258EA);
    EXPECT_TRUE(desEncryptTest(0xACACACACACACACAC, 0xACACACACACACACAC) == 0xEEAAC6D17880BD56);
    EXPECT_TRUE(desEncryptTest(0xADADADADADADADAD, 0xADADADADADADADAD) == 0x3C9A34CA4CB49EEB);
    EXPECT_TRUE(desEncryptTest(0xAEAEAEAEAEAEAEAE, 0xAEAEAEAEAEAEAEAE) == 0x9527B0287B75F5A3);
    EXPECT_TRUE(desEncryptTest(0xAFAFAFAFAFAFAFAF, 0xAFAFAFAFAFAFAFAF) == 0xF2D9D1BE74376C0C);
    EXPECT_TRUE(desEncryptTest(0xB0B0B0B0B0B0B0B0, 0xB0B0B0B0B0B0B0B0) == 0x939618DF0AEFAAE7);
    EXPECT_TRUE(desEncryptTest(0xB1B1B1B1B1B1B1B1, 0xB1B1B1B1B1B1B1B1) == 0x24692773CB9F27FE);
    EXPECT_TRUE(desEncryptTest(0xB2B2B2B2B2B2B2B2, 0xB2B2B2B2B2B2B2B2) == 0x38703BA5E2315D1D);
    EXPECT_TRUE(desEncryptTest(0xB3B3B3B3B3B3B3B3, 0xB3B3B3B3B3B3B3B3) == 0xFCB7E4B7D702E2FB);
    EXPECT_TRUE(desEncryptTest(0xB4B4B4B4B4B4B4B4, 0xB4B4B4B4B4B4B4B4) == 0x36F0D0B3675704D5);
    EXPECT_TRUE(desEncryptTest(0xB5B5B5B5B5B5B5B5, 0xB5B5B5B5B5B5B5B5) == 0x62D473F539FA0D8B);
    EXPECT_TRUE(desEncryptTest(0xB6B6B6B6B6B6B6B6, 0xB6B6B6B6B6B6B6B6) == 0x1533F3ED9BE8EF8E);
    EXPECT_TRUE(desEncryptTest(0xB7B7B7B7B7B7B7B7, 0xB7B7B7B7B7B7B7B7) == 0x9C4EA352599731ED);
    EXPECT_TRUE(desEncryptTest(0xB8B8B8B8B8B8B8B8, 0xB8B8B8B8B8B8B8B8) == 0xFABBF7C046FD273F);
    EXPECT_TRUE(desEncryptTest(0xB9B9B9B9B9B9B9B9, 0xB9B9B9B9B9B9B9B9) == 0xB7FE63A61C646F3A);
    EXPECT_TRUE(desEncryptTest(0xBABABABABABABABA, 0xBABABABABABABABA) == 0x10ADB6E2AB972BBE);
    EXPECT_TRUE(desEncryptTest(0xBBBBBBBBBBBBBBBB, 0xBBBBBBBBBBBBBBBB) == 0xF91DCAD912332F3B);
    EXPECT_TRUE(desEncryptTest(0xBCBCBCBCBCBCBCBC, 0xBCBCBCBCBCBCBCBC) == 0x46E7EF47323A701D);
    EXPECT_TRUE(desEncryptTest(0xBDBDBDBDBDBDBDBD, 0xBDBDBDBDBDBDBDBD) == 0x8DB18CCD9692F758);
    EXPECT_TRUE(desEncryptTest(0xBEBEBEBEBEBEBEBE, 0xBEBEBEBEBEBEBEBE) == 0xE6207B536AAAEFFC);
    EXPECT_TRUE(desEncryptTest(0xBFBFBFBFBFBFBFBF, 0xBFBFBFBFBFBFBFBF) == 0x92AA224372156A00);
    EXPECT_TRUE(desEncryptTest(0xC0C0C0C0C0C0C0C0, 0xC0C0C0C0C0C0C0C0) == 0xA3B357885B1E16D2);
    EXPECT_TRUE(desEncryptTest(0xC1C1C1C1C1C1C1C1, 0xC1C1C1C1C1C1C1C1) == 0x169F7629C970C1E5);
    EXPECT_TRUE(desEncryptTest(0xC2C2C2C2C2C2C2C2, 0xC2C2C2C2C2C2C2C2) == 0x62F44B247CF1348C);
    EXPECT_TRUE(desEncryptTest(0xC3C3C3C3C3C3C3C3, 0xC3C3C3C3C3C3C3C3) == 0xAE0FEEB0495932C8);
    EXPECT_TRUE(desEncryptTest(0xC4C4C4C4C4C4C4C4, 0xC4C4C4C4C4C4C4C4) == 0x72DAF2A7C9EA6803);
    EXPECT_TRUE(desEncryptTest(0xC5C5C5C5C5C5C5C5, 0xC5C5C5C5C5C5C5C5) == 0x4FB5D5536DA544F4);
    EXPECT_TRUE(desEncryptTest(0xC6C6C6C6C6C6C6C6, 0xC6C6C6C6C6C6C6C6) == 0x1DD4E65AAF7988B4);
    EXPECT_TRUE(desEncryptTest(0xC7C7C7C7C7C7C7C7, 0xC7C7C7C7C7C7C7C7) == 0x76BF084C1535A6C6);
    EXPECT_TRUE(desEncryptTest(0xC8C8C8C8C8C8C8C8, 0xC8C8C8C8C8C8C8C8) == 0xAFEC35B09D36315F);
    EXPECT_TRUE(desEncryptTest(0xC9C9C9C9C9C9C9C9, 0xC9C9C9C9C9C9C9C9) == 0xC8078A6148818403);
    EXPECT_TRUE(desEncryptTest(0xCACACACACACACACA, 0xCACACACACACACACA) == 0x4DA91CB4124B67FE);
    EXPECT_TRUE(desEncryptTest(0xCBCBCBCBCBCBCBCB, 0xCBCBCBCBCBCBCBCB) == 0x2DABFEB346794C3D);
    EXPECT_TRUE(desEncryptTest(0xCCCCCCCCCCCCCCCC, 0xCCCCCCCCCCCCCCCC) == 0xFBCD12C790D21CD7);
    EXPECT_TRUE(desEncryptTest(0xCDCDCDCDCDCDCDCD, 0xCDCDCDCDCDCDCDCD) == 0x536873DB879CC770);
    EXPECT_TRUE(desEncryptTest(0xCECECECECECECECE, 0xCECECECECECECECE) == 0x9AA159D7309DA7A0);
    EXPECT_TRUE(desEncryptTest(0xCFCFCFCFCFCFCFCF, 0xCFCFCFCFCFCFCFCF) == 0x0B844B9D8C4EA14A);
    EXPECT_TRUE(desEncryptTest(0xD0D0D0D0D0D0D0D0, 0xD0D0D0D0D0D0D0D0) == 0x3BBD84CE539E68C4);
    EXPECT_TRUE(desEncryptTest(0xD1D1D1D1D1D1D1D1, 0xD1D1D1D1D1D1D1D1) == 0xCF3E4F3E026E2C8E);
    EXPECT_TRUE(desEncryptTest(0xD2D2D2D2D2D2D2D2, 0xD2D2D2D2D2D2D2D2) == 0x82F85885D542AF58);
    EXPECT_TRUE(desEncryptTest(0xD3D3D3D3D3D3D3D3, 0xD3D3D3D3D3D3D3D3) == 0x22D334D6493B3CB6);
    EXPECT_TRUE(desEncryptTest(0xD4D4D4D4D4D4D4D4, 0xD4D4D4D4D4D4D4D4) == 0x47E9CB3E3154D673);
    EXPECT_TRUE(desEncryptTest(0xD5D5D5D5D5D5D5D5, 0xD5D5D5D5D5D5D5D5) == 0x2352BCC708ADC7E9);
    EXPECT_TRUE(desEncryptTest(0xD6D6D6D6D6D6D6D6, 0xD6D6D6D6D6D6D6D6) == 0x8C0F3BA0C8601980);
    EXPECT_TRUE(desEncryptTest(0xD7D7D7D7D7D7D7D7, 0xD7D7D7D7D7D7D7D7) == 0xEE5E9FD70CEF00E9);
    EXPECT_TRUE(desEncryptTest(0xD8D8D8D8D8D8D8D8, 0xD8D8D8D8D8D8D8D8) == 0xDEF6BDA6CABF9547);
    EXPECT_TRUE(desEncryptTest(0xD9D9D9D9D9D9D9D9, 0xD9D9D9D9D9D9D9D9) == 0x4DADD04A0EA70F20);
    EXPECT_TRUE(desEncryptTest(0xDADADADADADADADA, 0xDADADADADADADADA) == 0xC1AA16689EE1B482);
    EXPECT_TRUE(desEncryptTest(0xDBDBDBDBDBDBDBDB, 0xDBDBDBDBDBDBDBDB) == 0xF45FC26193E69AEE);
    EXPECT_TRUE(desEncryptTest(0xDCDCDCDCDCDCDCDC, 0xDCDCDCDCDCDCDCDC) == 0xD0CFBB937CEDBFB5);
    EXPECT_TRUE(desEncryptTest(0xDDDDDDDDDDDDDDDD, 0xDDDDDDDDDDDDDDDD) == 0xF0752004EE23D87B);
    EXPECT_TRUE(desEncryptTest(0xDEDEDEDEDEDEDEDE, 0xDEDEDEDEDEDEDEDE) == 0x77A791E28AA464A5);
    EXPECT_TRUE(desEncryptTest(0xDFDFDFDFDFDFDFDF, 0xDFDFDFDFDFDFDFDF) == 0xE7562A7F56FF4966);
    EXPECT_TRUE(desEncryptTest(0xE0E0E0E0E0E0E0E0, 0xE0E0E0E0E0E0E0E0) == 0xB026913F2CCFB109);
    EXPECT_TRUE(desEncryptTest(0xE1E1E1E1E1E1E1E1, 0xE1E1E1E1E1E1E1E1) == 0x0DB572DDCE388AC7);
    EXPECT_TRUE(desEncryptTest(0xE2E2E2E2E2E2E2E2, 0xE2E2E2E2E2E2E2E2) == 0xD9FA6595F0C094CA);
    EXPECT_TRUE(desEncryptTest(0xE3E3E3E3E3E3E3E3, 0xE3E3E3E3E3E3E3E3) == 0xADE4804C4BE4486E);
    EXPECT_TRUE(desEncryptTest(0xE4E4E4E4E4E4E4E4, 0xE4E4E4E4E4E4E4E4) == 0x007B81F520E6D7DA);
    EXPECT_TRUE(desEncryptTest(0xE5E5E5E5E5E5E5E5, 0xE5E5E5E5E5E5E5E5) == 0x961AEB77BFC10B3C);
    EXPECT_TRUE(desEncryptTest(0xE6E6E6E6E6E6E6E6, 0xE6E6E6E6E6E6E6E6) == 0x8A8DD870C9B14AF2);
    EXPECT_TRUE(desEncryptTest(0xE7E7E7E7E7E7E7E7, 0xE7E7E7E7E7E7E7E7) == 0x3CC02E14B6349B25);
    EXPECT_TRUE(desEncryptTest(0xE8E8E8E8E8E8E8E8, 0xE8E8E8E8E8E8E8E8) == 0xBAD3EE68BDDB9607);
    EXPECT_TRUE(desEncryptTest(0xE9E9E9E9E9E9E9E9, 0xE9E9E9E9E9E9E9E9) == 0xDFF918E93BDAD292);
    EXPECT_TRUE(desEncryptTest(0xEAEAEAEAEAEAEAEA, 0xEAEAEAEAEAEAEAEA) == 0x8FE559C7CD6FA56D);
    EXPECT_TRUE(desEncryptTest(0xEBEBEBEBEBEBEBEB, 0xEBEBEBEBEBEBEBEB) == 0xC88480835C1A444C);
    EXPECT_TRUE(desEncryptTest(0xECECECECECECECEC, 0xECECECECECECECEC) == 0xD6EE30A16B2CC01E);
    EXPECT_TRUE(desEncryptTest(0xEDEDEDEDEDEDEDED, 0xEDEDEDEDEDEDEDED) == 0x6932D887B2EA9C1A);
    EXPECT_TRUE(desEncryptTest(0xEEEEEEEEEEEEEEEE, 0xEEEEEEEEEEEEEEEE) == 0x0BFC865461F13ACC);
    EXPECT_TRUE(desEncryptTest(0xEFEFEFEFEFEFEFEF, 0xEFEFEFEFEFEFEFEF) == 0x228AEA0D403E807A);
    EXPECT_TRUE(desEncryptTest(0xF0F0F0F0F0F0F0F0, 0xF0F0F0F0F0F0F0F0) == 0x2A2891F65BB8173C);
    EXPECT_TRUE(desEncryptTest(0xF1F1F1F1F1F1F1F1, 0xF1F1F1F1F1F1F1F1) == 0x5D1B8FAF7839494B);
    EXPECT_TRUE(desEncryptTest(0xF2F2F2F2F2F2F2F2, 0xF2F2F2F2F2F2F2F2) == 0x1C0A9280EECF5D48);
    EXPECT_TRUE(desEncryptTest(0xF3F3F3F3F3F3F3F3, 0xF3F3F3F3F3F3F3F3) == 0x6CBCE951BBC30F74);
    EXPECT_TRUE(desEncryptTest(0xF4F4F4F4F4F4F4F4, 0xF4F4F4F4F4F4F4F4) == 0x9CA66E96BD08BC70);
    EXPECT_TRUE(desEncryptTest(0xF5F5F5F5F5F5F5F5, 0xF5F5F5F5F5F5F5F5) == 0xF5D779FCFBB28BF3);
    EXPECT_TRUE(desEncryptTest(0xF6F6F6F6F6F6F6F6, 0xF6F6F6F6F6F6F6F6) == 0x0FEC6BBF9B859184);
    EXPECT_TRUE(desEncryptTest(0xF7F7F7F7F7F7F7F7, 0xF7F7F7F7F7F7F7F7) == 0xEF88D2BF052DBDA8);
    EXPECT_TRUE(desEncryptTest(0xF8F8F8F8F8F8F8F8, 0xF8F8F8F8F8F8F8F8) == 0x39ADBDDB7363090D);
    EXPECT_TRUE(desEncryptTest(0xF9F9F9F9F9F9F9F9, 0xF9F9F9F9F9F9F9F9) == 0xC0AEAF445F7E2A7A);
    EXPECT_TRUE(desEncryptTest(0xFAFAFAFAFAFAFAFA, 0xFAFAFAFAFAFAFAFA) == 0xC66F54067298D4E9);
    EXPECT_TRUE(desEncryptTest(0xFBFBFBFBFBFBFBFB, 0xFBFBFBFBFBFBFBFB) == 0xE0BA8F4488AAF97C);
    EXPECT_TRUE(desEncryptTest(0xFCFCFCFCFCFCFCFC, 0xFCFCFCFCFCFCFCFC) == 0x67B36E2875D9631C);
    EXPECT_TRUE(desEncryptTest(0xFDFDFDFDFDFDFDFD, 0xFDFDFDFDFDFDFDFD) == 0x1ED83D49E267191D);
    EXPECT_TRUE(desEncryptTest(0xFEFEFEFEFEFEFEFE, 0xFEFEFEFEFEFEFEFE) == 0x66B2B23EA84693AD);
    EXPECT_TRUE(desEncryptTest(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF) == 0x7359B2163E4EDC58);
    EXPECT_TRUE(desEncryptTest(0x0001020304050607, 0x0011223344556677) == 0x3EF0A891CF8ED990);
    EXPECT_TRUE(desEncryptTest(0x2BD6459F82C5B300, 0xEA024714AD5C4D84) == 0x126EFE8ED312190A);
    EXPECT_TRUE(desEncryptTest(0x8000000000000000, 0x1C29EEE68829F666) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x4000000000000000, 0x1EBAA7E2844108D1) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x2000000000000000, 0xDD75FF6DD1D07407) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x1000000000000000, 0x6C0D0366D7FC1E93) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0800000000000000, 0x65FB4EDB3731E927) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0400000000000000, 0x1A4795892BD82629) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0200000000000000, 0x6E228A9F47A31527) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0100000000000000, 0x8CA64DE9C1B123A7) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0080000000000000, 0x5A01EA0528FE4DBC) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0040000000000000, 0x2AA7048B7F843ACC) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0020000000000000, 0xFB1426125A5AE00F) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0010000000000000, 0x3ACC2A83D9FE0CF8) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0008000000000000, 0x2616451A5426B97D) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0004000000000000, 0xB85395BAA402FFB9) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0002000000000000, 0xD02182A2E8E573A1) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0001000000000000, 0x8CA64DE9C1B123A7) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000800000000000, 0xC6ED12A06A4CC156) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000400000000000, 0x64EEA4A26D381E26) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000200000000000, 0x4EA9D5AA0C2C3C4E) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000100000000000, 0x8D8661C34C6F4D21) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000080000000000, 0xE3FF48ACC26B8A33) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000040000000000, 0xC57374F43AF34F17) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000020000000000, 0x857FB4722F85F57F) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000010000000000, 0x8CA64DE9C1B123A7) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000008000000000, 0xD86AFF1EE01AAA00) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000004000000000, 0x7B4937859794FC5E) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000002000000000, 0x05EF338303C238D9) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000001000000000, 0x0E2F05283A7DD2B2) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000800000000, 0x661502A71B53EAD4) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000400000000, 0x1EBBFCECD36FA671) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000200000000, 0x6800E59AF69486CD) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000100000000, 0x8CA64DE9C1B123A7) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000080000000, 0x82453A94E658B38D) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000040000000, 0xBD0622EBC5E34C41) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000020000000, 0x4C3E34B8BE70C9F2) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000010000000, 0x1027E471BF185728) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000008000000, 0x39DE1CB6FE1959A4) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000004000000, 0xE3C3CC1A68B58E5D) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000002000000, 0xB60F05703D5012FA) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000001000000, 0x8CA64DE9C1B123A7) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000800000, 0xD19667C59D94D4F7) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000400000, 0x3CA5963292ED8725) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000200000, 0x1F2B2104BF62E510) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000100000, 0x322D5F2AD1F6C3F8) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000080000, 0x202D8D2E16C3DE65) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000040000, 0x10B71036AF979F7A) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000020000, 0x980048358ADB5189) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000010000, 0x8CA64DE9C1B123A7) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000008000, 0x737589DC3ADDB4D5) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000004000, 0xF7900FD046800D04) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000002000, 0x95BE3F4238740526) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000001000, 0x656F2445A164F9E1) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000800, 0x6C77909A14006365) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000400, 0xB3524D3045B44663) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000200, 0x4BFE8E87CFF074F7) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000100, 0x8CA64DE9C1B123A7) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000080, 0x0EBFE2B0D89F9EC3) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000040, 0xA34785BBA566D0D5) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000020, 0xF2B12EA4CF8F6FC2) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000010, 0x5D65F4BD79E2AD83) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000008, 0x6D2D1CC9A52139BD) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000004, 0x6CB9F25ABAAA9DDD) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000002, 0x2F3F20C13DEF464C) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000001, 0x8CA64DE9C1B123A7) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x95F8A5E5DD31D900) == 0x8000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xDD7F121CA5015619) == 0x4000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x2E8653104F3834EA) == 0x2000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x4BD388FF6CD81D4F) == 0x1000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x20B9E767B2FB1456) == 0x0800000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x55579380D77138EF) == 0x0400000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x6CC5DEFAAF04512F) == 0x0200000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0D9F279BA5D87260) == 0x0100000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xD9031B0271BD5A0A) == 0x0080000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x424250B37C3DD951) == 0x0040000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xB8061B7ECD9A21E5) == 0x0020000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xF15D0F286B65BD28) == 0x0010000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xADD0CC8D6E5DEBA1) == 0x0008000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xE6D5F82752AD63D1) == 0x0004000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xECBFE3BD3F591A5E) == 0x0002000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xF356834379D165CD) == 0x0001000000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x2B9F982F20037FA9) == 0x0000800000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x889DE068A16F0BE6) == 0x0000400000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xE19E275D846A1298) == 0x0000200000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x329A8ED523D71AEC) == 0x0000100000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xE7FCE22557D23C97) == 0x0000080000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x12A9F5817FF2D65D) == 0x0000040000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xA484C3AD38DC9C19) == 0x0000020000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xFBE00A8A1EF8AD72) == 0x0000010000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x750D079407521363) == 0x0000008000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x64FEED9C724C2FAF) == 0x0000004000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xF02B263B328E2B60) == 0x0000002000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x9D64555A9A10B852) == 0x0000001000000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xD106FF0BED5255D7) == 0x0000000800000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xE1652C6B138C64A5) == 0x0000000400000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xE428581186EC8F46) == 0x0000000200000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xAEB5F5EDE22D1A36) == 0x0000000100000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xE943D7568AEC0C5C) == 0x0000000080000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xDF98C8276F54B04B) == 0x0000000040000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xB160E4680F6C696F) == 0x0000000020000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xFA0752B07D9C4AB8) == 0x0000000010000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xCA3A2B036DBC8502) == 0x0000000008000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x5E0905517BB59BCF) == 0x0000000004000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x814EEB3B91D90726) == 0x0000000002000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x4D49DB1532919C9F) == 0x0000000001000000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x25EB5FC3F8CF0621) == 0x0000000000800000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xAB6A20C0620D1C6F) == 0x0000000000400000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x79E90DBC98F92CCA) == 0x0000000000200000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x866ECEDD8072BB0E) == 0x0000000000100000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x8B54536F2F3E64A8) == 0x0000000000080000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xEA51D3975595B86B) == 0x0000000000040000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xCAFFC6AC4542DE31) == 0x0000000000020000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x8DD45A2DDF90796C) == 0x0000000000010000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x1029D55E880EC2D0) == 0x0000000000008000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x5D86CB23639DBEA9) == 0x0000000000004000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x1D1CA853AE7C0C5F) == 0x0000000000002000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xCE332329248F3228) == 0x0000000000001000);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x8405D1ABE24FB942) == 0x0000000000000800);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xE643D78090CA4207) == 0x0000000000000400);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x48221B9937748A23) == 0x0000000000000200);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xDD7C0BBD61FAFD54) == 0x0000000000000100);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x2FBC291A570DB5C4) == 0x0000000000000080);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xE07C30D7E4E26E12) == 0x0000000000000040);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x0953E2258E8E90A1) == 0x0000000000000020);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x5B711BC4CEEBF2EE) == 0x0000000000000010);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xCC083F1E6D9E85F6) == 0x0000000000000008);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0xD2FD8867D50D2DFE) == 0x0000000000000004);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x06E7EA22CE92708F) == 0x0000000000000002);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x166B40B44ABA4BD6) == 0x0000000000000001);
    EXPECT_TRUE(desEncryptTest(0x0000000000000000, 0x8CA64DE9C1B123A7) == 0x0000000000000000);
    EXPECT_TRUE(desEncryptTest(0x0101010101010101, 0x994D4DC157B96C52) == 0x0101010101010101);
    EXPECT_TRUE(desEncryptTest(0x0202020202020202, 0xF09FA63CCDFA2BAD) == 0x0202020202020202);
    EXPECT_TRUE(desEncryptTest(0x0303030303030303, 0x918C7AEFF893AD51) == 0x0303030303030303);
    EXPECT_TRUE(desEncryptTest(0x0404040404040404, 0x8991C0C48CF0AF81) == 0x0404040404040404);
    EXPECT_TRUE(desEncryptTest(0x0505050505050505, 0x25676954529031CB) == 0x0505050505050505);
    EXPECT_TRUE(desEncryptTest(0x0606060606060606, 0xAAEF9DD11DE74546) == 0x0606060606060606);
    EXPECT_TRUE(desEncryptTest(0x0707070707070707, 0x8DFFA9A0B2F2548B) == 0x0707070707070707);
    EXPECT_TRUE(desEncryptTest(0x0808080808080808, 0xD932847445DA4FD8) == 0x0808080808080808);
    EXPECT_TRUE(desEncryptTest(0x0909090909090909, 0x5110E59AAEC7335B) == 0x0909090909090909);
    EXPECT_TRUE(desEncryptTest(0x0A0A0A0A0A0A0A0A, 0xCE681111BA3B7B11) == 0x0A0A0A0A0A0A0A0A);
    EXPECT_TRUE(desEncryptTest(0x0B0B0B0B0B0B0B0B, 0xB5AD1C8C49965CCA) == 0x0B0B0B0B0B0B0B0B);
    EXPECT_TRUE(desEncryptTest(0x0C0C0C0C0C0C0C0C, 0x9F9958F3E2767EA7) == 0x0C0C0C0C0C0C0C0C);
    EXPECT_TRUE(desEncryptTest(0x0D0D0D0D0D0D0D0D, 0x149D6492A0D809EE) == 0x0D0D0D0D0D0D0D0D);
    EXPECT_TRUE(desEncryptTest(0x0E0E0E0E0E0E0E0E, 0xF1EDC5B1F98F6313) == 0x0E0E0E0E0E0E0E0E);
    EXPECT_TRUE(desEncryptTest(0x0F0F0F0F0F0F0F0F, 0x57057A2B85367BED) == 0x0F0F0F0F0F0F0F0F);
    EXPECT_TRUE(desEncryptTest(0x1010101010101010, 0xB376C874E6F987D0) == 0x1010101010101010);
    EXPECT_TRUE(desEncryptTest(0x1111111111111111, 0x237B2304C393D3AC) == 0x1111111111111111);
    EXPECT_TRUE(desEncryptTest(0x1212121212121212, 0xA2F68A96740E3F2D) == 0x1212121212121212);
    EXPECT_TRUE(desEncryptTest(0x1313131313131313, 0x1D779D8AB79E89EF) == 0x1313131313131313);
    EXPECT_TRUE(desEncryptTest(0x1414141414141414, 0x1E59064FFEA191EF) == 0x1414141414141414);
    EXPECT_TRUE(desEncryptTest(0x1515151515151515, 0x53B4DAE06761FFA1) == 0x1515151515151515);
    EXPECT_TRUE(desEncryptTest(0x1616161616161616, 0x550FB1A5507A49ED) == 0x1616161616161616);
    EXPECT_TRUE(desEncryptTest(0x1717171717171717, 0x64FFAFFBB608B002) == 0x1717171717171717);
    EXPECT_TRUE(desEncryptTest(0x1818181818181818, 0x2EF928E663986E1C) == 0x1818181818181818);
    EXPECT_TRUE(desEncryptTest(0x1919191919191919, 0x9C7EB95CB182233E) == 0x1919191919191919);
    EXPECT_TRUE(desEncryptTest(0x1A1A1A1A1A1A1A1A, 0xB62CFEB46DD18577) == 0x1A1A1A1A1A1A1A1A);
    EXPECT_TRUE(desEncryptTest(0x1B1B1B1B1B1B1B1B, 0x8F9F498CBA6DF908) == 0x1B1B1B1B1B1B1B1B);
    EXPECT_TRUE(desEncryptTest(0x1C1C1C1C1C1C1C1C, 0x3017633FB8197C95) == 0x1C1C1C1C1C1C1C1C);
    EXPECT_TRUE(desEncryptTest(0x1D1D1D1D1D1D1D1D, 0x079FA37ED80BA064) == 0x1D1D1D1D1D1D1D1D);
    EXPECT_TRUE(desEncryptTest(0x1E1E1E1E1E1E1E1E, 0xC8040684A207D1B5) == 0x1E1E1E1E1E1E1E1E);
    EXPECT_TRUE(desEncryptTest(0x1F1F1F1F1F1F1F1F, 0x61B145D97C491523) == 0x1F1F1F1F1F1F1F1F);
    EXPECT_TRUE(desEncryptTest(0x2020202020202020, 0x9073C79790306F7D) == 0x2020202020202020);
    EXPECT_TRUE(desEncryptTest(0x2121212121212121, 0xA80B2BFEBE10A4DA) == 0x2121212121212121);
    EXPECT_TRUE(desEncryptTest(0x2222222222222222, 0xD105F93010B3B6F5) == 0x2222222222222222);
    EXPECT_TRUE(desEncryptTest(0x2323232323232323, 0x8F521B75483A0B94) == 0x2323232323232323);
    EXPECT_TRUE(desEncryptTest(0x2424242424242424, 0xC8F028A3EE60B289) == 0x2424242424242424);
    EXPECT_TRUE(desEncryptTest(0x2525252525252525, 0xDC8D45D7517FB58C) == 0x2525252525252525);
    EXPECT_TRUE(desEncryptTest(0x2626262626262626, 0xA827E72CD184555E) == 0x2626262626262626);
    EXPECT_TRUE(desEncryptTest(0x2727272727272727, 0x11A586CDC15F4B62) == 0x2727272727272727);
    EXPECT_TRUE(desEncryptTest(0x2828282828282828, 0x6066EF85FF1F8A46) == 0x2828282828282828);
    EXPECT_TRUE(desEncryptTest(0x2929292929292929, 0x64F017F35A3F50D1) == 0x2929292929292929);
    EXPECT_TRUE(desEncryptTest(0x2A2A2A2A2A2A2A2A, 0x19D9B4C305AB5AC4) == 0x2A2A2A2A2A2A2A2A);
    EXPECT_TRUE(desEncryptTest(0x2B2B2B2B2B2B2B2B, 0xD13BE446B15397C0) == 0x2B2B2B2B2B2B2B2B);
    EXPECT_TRUE(desEncryptTest(0x2C2C2C2C2C2C2C2C, 0xA1AAAC9B6D3DAB0A) == 0x2C2C2C2C2C2C2C2C);
    EXPECT_TRUE(desEncryptTest(0x2D2D2D2D2D2D2D2D, 0x60EF54CED063EEAC) == 0x2D2D2D2D2D2D2D2D);
    EXPECT_TRUE(desEncryptTest(0x2E2E2E2E2E2E2E2E, 0x659EF16E9EFFC16D) == 0x2E2E2E2E2E2E2E2E);
    EXPECT_TRUE(desEncryptTest(0x2F2F2F2F2F2F2F2F, 0x7F991C35E71F8D95) == 0x2F2F2F2F2F2F2F2F);
    EXPECT_TRUE(desEncryptTest(0x3030303030303030, 0x335AC5E54AA4C5FA) == 0x3030303030303030);
    EXPECT_TRUE(desEncryptTest(0x3131313131313131, 0x6D0A7ECC98A019A6) == 0x3131313131313131);
    EXPECT_TRUE(desEncryptTest(0x3232323232323232, 0xDB71F2F904CE4467) == 0x3232323232323232);
    EXPECT_TRUE(desEncryptTest(0x3333333333333333, 0x19B6A607F49D7EBF) == 0x3333333333333333);
    EXPECT_TRUE(desEncryptTest(0x3434343434343434, 0x086DA2A46819B2EC) == 0x3434343434343434);
    EXPECT_TRUE(desEncryptTest(0x3535353535353535, 0xBFBEB4BB6C8BA8D3) == 0x3535353535353535);
    EXPECT_TRUE(desEncryptTest(0x3636363636363636, 0xC0EA975A16621073) == 0x3636363636363636);
    EXPECT_TRUE(desEncryptTest(0x3737373737373737, 0xB53D58A1CAD79864) == 0x3737373737373737);
    EXPECT_TRUE(desEncryptTest(0x3838383838383838, 0xB7F074CB09D21987) == 0x3838383838383838);
    EXPECT_TRUE(desEncryptTest(0x3939393939393939, 0xE6F6D6E5DCCAFBAF) == 0x3939393939393939);
    EXPECT_TRUE(desEncryptTest(0x3A3A3A3A3A3A3A3A, 0x428395367157DB18) == 0x3A3A3A3A3A3A3A3A);
    EXPECT_TRUE(desEncryptTest(0x3B3B3B3B3B3B3B3B, 0xB71F8389C32F928E) == 0x3B3B3B3B3B3B3B3B);
    EXPECT_TRUE(desEncryptTest(0x3C3C3C3C3C3C3C3C, 0x290DDC00BAFBF6C0) == 0x3C3C3C3C3C3C3C3C);
    EXPECT_TRUE(desEncryptTest(0x3D3D3D3D3D3D3D3D, 0x96F8EC19C7C00F69) == 0x3D3D3D3D3D3D3D3D);
    EXPECT_TRUE(desEncryptTest(0x3E3E3E3E3E3E3E3E, 0xE1E2B92BEC7B6EDA) == 0x3E3E3E3E3E3E3E3E);
    EXPECT_TRUE(desEncryptTest(0x3F3F3F3F3F3F3F3F, 0x4FCD12FF1A0F4828) == 0x3F3F3F3F3F3F3F3F);
    EXPECT_TRUE(desEncryptTest(0x4040404040404040, 0xFDA1AEAC4103BEC7) == 0x4040404040404040);
    EXPECT_TRUE(desEncryptTest(0x4141414141414141, 0xC023018BB50973DF) == 0x4141414141414141);
    EXPECT_TRUE(desEncryptTest(0x4242424242424242, 0x2F17AB3C4EF47CED) == 0x4242424242424242);
    EXPECT_TRUE(desEncryptTest(0x4343434343434343, 0x403E4F9726A43E2B) == 0x4343434343434343);
    EXPECT_TRUE(desEncryptTest(0x4444444444444444, 0x300FB94913B09D9F) == 0x4444444444444444);
    EXPECT_TRUE(desEncryptTest(0x4545454545454545, 0xCC3368EE3DD10A86) == 0x4545454545454545);
    EXPECT_TRUE(desEncryptTest(0x4646464646464646, 0x4047149B98541E84) == 0x4646464646464646);
    EXPECT_TRUE(desEncryptTest(0x4747474747474747, 0x6F50E18DA9045F21) == 0x4747474747474747);
    EXPECT_TRUE(desEncryptTest(0x4848484848484848, 0x8714D44CAC7D0D14) == 0x4848484848484848);
    EXPECT_TRUE(desEncryptTest(0x4949494949494949, 0x83829CFFC32CED9B) == 0x4949494949494949);
    EXPECT_TRUE(desEncryptTest(0x4A4A4A4A4A4A4A4A, 0x16044259F6FEEF2A) == 0x4A4A4A4A4A4A4A4A);
    EXPECT_TRUE(desEncryptTest(0x4B4B4B4B4B4B4B4B, 0xDAEB0CCC9F9C02A7) == 0x4B4B4B4B4B4B4B4B);
    EXPECT_TRUE(desEncryptTest(0x4C4C4C4C4C4C4C4C, 0x1F9442EA265CB749) == 0x4C4C4C4C4C4C4C4C);
    EXPECT_TRUE(desEncryptTest(0x4D4D4D4D4D4D4D4D, 0xE4911A6B657A86BE) == 0x4D4D4D4D4D4D4D4D);
    EXPECT_TRUE(desEncryptTest(0x4E4E4E4E4E4E4E4E, 0x67464D8D5A2822CF) == 0x4E4E4E4E4E4E4E4E);
    EXPECT_TRUE(desEncryptTest(0x4F4F4F4F4F4F4F4F, 0xC1419997381C7DA3) == 0x4F4F4F4F4F4F4F4F);
    EXPECT_TRUE(desEncryptTest(0x5050505050505050, 0x599A5CD62A06D027) == 0x5050505050505050);
    EXPECT_TRUE(desEncryptTest(0x5151515151515151, 0x88FD236C41B3BB51) == 0x5151515151515151);
    EXPECT_TRUE(desEncryptTest(0x5252525252525252, 0x41CC247560605B0B) == 0x5252525252525252);
    EXPECT_TRUE(desEncryptTest(0x5353535353535353, 0x0F91178929EF4AA1) == 0x5353535353535353);
    EXPECT_TRUE(desEncryptTest(0x5454545454545454, 0xDC644E7A6FAA6446) == 0x5454545454545454);
    EXPECT_TRUE(desEncryptTest(0x5555555555555555, 0x27BDEAC7848061C2) == 0x5555555555555555);
    EXPECT_TRUE(desEncryptTest(0x5656565656565656, 0x51115EC4EBDDE14E) == 0x5656565656565656);
    EXPECT_TRUE(desEncryptTest(0x5757575757575757, 0xA1731C55A4FB1B12) == 0x5757575757575757);
    EXPECT_TRUE(desEncryptTest(0x5858585858585858, 0x883D1CB568FA4AF6) == 0x5858585858585858);
    EXPECT_TRUE(desEncryptTest(0x5959595959595959, 0xEE21D431F34E89A5) == 0x5959595959595959);
    EXPECT_TRUE(desEncryptTest(0x5A5A5A5A5A5A5A5A, 0x8ED4FA5DF0B7BAA9) == 0x5A5A5A5A5A5A5A5A);
    EXPECT_TRUE(desEncryptTest(0x5B5B5B5B5B5B5B5B, 0x8AA3372D4A4CF54D) == 0x5B5B5B5B5B5B5B5B);
    EXPECT_TRUE(desEncryptTest(0x5C5C5C5C5C5C5C5C, 0x6E9D4FF9DE08AAD1) == 0x5C5C5C5C5C5C5C5C);
    EXPECT_TRUE(desEncryptTest(0x5D5D5D5D5D5D5D5D, 0x302DE41DFAE50C3E) == 0x5D5D5D5D5D5D5D5D);
    EXPECT_TRUE(desEncryptTest(0x5E5E5E5E5E5E5E5E, 0x15238624D6D73121) == 0x5E5E5E5E5E5E5E5E);
    EXPECT_TRUE(desEncryptTest(0x5F5F5F5F5F5F5F5F, 0x960ADA6F022E3019) == 0x5F5F5F5F5F5F5F5F);
    EXPECT_TRUE(desEncryptTest(0x6060606060606060, 0xCAF3211A707960D6) == 0x6060606060606060);
    EXPECT_TRUE(desEncryptTest(0x6161616161616161, 0xF7E458FA7081BE7D) == 0x6161616161616161);
    EXPECT_TRUE(desEncryptTest(0x6262626262626262, 0x5FAB0E843C6E5BA9) == 0x6262626262626262);
    EXPECT_TRUE(desEncryptTest(0x6363636363636363, 0x7CF40025EB32B66F) == 0x6363636363636363);
    EXPECT_TRUE(desEncryptTest(0x6464646464646464, 0x1D3FF19CA208D2B2) == 0x6464646464646464);
    EXPECT_TRUE(desEncryptTest(0x6565656565656565, 0xBDFBCA399EB932A0) == 0x6565656565656565);
    EXPECT_TRUE(desEncryptTest(0x6666666666666666, 0x29CE12AFEA960B70) == 0x6666666666666666);
    EXPECT_TRUE(desEncryptTest(0x6767676767676767, 0x82F8FB5140014B85) == 0x6767676767676767);
    EXPECT_TRUE(desEncryptTest(0x6868686868686868, 0x7B3C0F4E34F9D1E9) == 0x6868686868686868);
    EXPECT_TRUE(desEncryptTest(0x6969696969696969, 0x8F7B0EAD94E39A13) == 0x6969696969696969);
    EXPECT_TRUE(desEncryptTest(0x6A6A6A6A6A6A6A6A, 0x6D3F31C7778EAD8A) == 0x6A6A6A6A6A6A6A6A);
    EXPECT_TRUE(desEncryptTest(0x6B6B6B6B6B6B6B6B, 0x37B18B3906BAB3A8) == 0x6B6B6B6B6B6B6B6B);
    EXPECT_TRUE(desEncryptTest(0x6C6C6C6C6C6C6C6C, 0x12B4CB7A4CBE767B) == 0x6C6C6C6C6C6C6C6C);
    EXPECT_TRUE(desEncryptTest(0x6D6D6D6D6D6D6D6D, 0x2420B66A1055C0E9) == 0x6D6D6D6D6D6D6D6D);
    EXPECT_TRUE(desEncryptTest(0x6E6E6E6E6E6E6E6E, 0x7E8E816788C6D588) == 0x6E6E6E6E6E6E6E6E);
    EXPECT_TRUE(desEncryptTest(0x6F6F6F6F6F6F6F6F, 0xC24105E33E184FF6) == 0x6F6F6F6F6F6F6F6F);
    EXPECT_TRUE(desEncryptTest(0x7070707070707070, 0xE4A18C1C24EBFBB9) == 0x7070707070707070);
    EXPECT_TRUE(desEncryptTest(0x7171717171717171, 0x89BDBD3DE031EED6) == 0x7171717171717171);
    EXPECT_TRUE(desEncryptTest(0x7272727272727272, 0xDBB840AF153D42DC) == 0x7272727272727272);
    EXPECT_TRUE(desEncryptTest(0x7373737373737373, 0x5198BB48B85D9073) == 0x7373737373737373);
    EXPECT_TRUE(desEncryptTest(0x7474747474747474, 0xEF91577024209D96) == 0x7474747474747474);
    EXPECT_TRUE(desEncryptTest(0x7575757575757575, 0x862D09602D08F4AF) == 0x7575757575757575);
    EXPECT_TRUE(desEncryptTest(0x7676767676767676, 0xDF8FDD3DA8BE381C) == 0x7676767676767676);
    EXPECT_TRUE(desEncryptTest(0x7777777777777777, 0xF4FA92CAF1EA65C8) == 0x7777777777777777);
    EXPECT_TRUE(desEncryptTest(0x7878787878787878, 0x6C51D39A736AB06E) == 0x7878787878787878);
    EXPECT_TRUE(desEncryptTest(0x7979797979797979, 0xCA78FA0F8940CDB6) == 0x7979797979797979);
    EXPECT_TRUE(desEncryptTest(0x7A7A7A7A7A7A7A7A, 0xE32531D4F4783A94) == 0x7A7A7A7A7A7A7A7A);
    EXPECT_TRUE(desEncryptTest(0x7B7B7B7B7B7B7B7B, 0xC983F15CAE1DEB86) == 0x7B7B7B7B7B7B7B7B);
    EXPECT_TRUE(desEncryptTest(0x7C7C7C7C7C7C7C7C, 0xF8895BF6515436F3) == 0x7C7C7C7C7C7C7C7C);
    EXPECT_TRUE(desEncryptTest(0x7D7D7D7D7D7D7D7D, 0x0B679E5008B5B69B) == 0x7D7D7D7D7D7D7D7D);
    EXPECT_TRUE(desEncryptTest(0x7E7E7E7E7E7E7E7E, 0x909D89361F819432) == 0x7E7E7E7E7E7E7E7E);
    EXPECT_TRUE(desEncryptTest(0x7F7F7F7F7F7F7F7F, 0xC8FCD27001B95D10) == 0x7F7F7F7F7F7F7F7F);
    EXPECT_TRUE(desEncryptTest(0x8080808080808080, 0x37032D8FFE46A2EF) == 0x8080808080808080);
    EXPECT_TRUE(desEncryptTest(0x8181818181818181, 0x6F6276C9E07E6BCD) == 0x8181818181818181);
    EXPECT_TRUE(desEncryptTest(0x8282828282828282, 0xF49861AFF74A4964) == 0x8282828282828282);
    EXPECT_TRUE(desEncryptTest(0x8383838383838383, 0x0776A409AEABC90C) == 0x8383838383838383);
    EXPECT_TRUE(desEncryptTest(0x8484848484848484, 0x367C0EA351E21479) == 0x8484848484848484);
    EXPECT_TRUE(desEncryptTest(0x8585858585858585, 0x1CDACE2B0B87C56B) == 0x8585858585858585);
    EXPECT_TRUE(desEncryptTest(0x8686868686868686, 0x358705F076BF3249) == 0x8686868686868686);
    EXPECT_TRUE(desEncryptTest(0x8787878787878787, 0x93AE2C658C954F91) == 0x8787878787878787);
    EXPECT_TRUE(desEncryptTest(0x8888888888888888, 0x0B056D350E159A37) == 0x8888888888888888);
    EXPECT_TRUE(desEncryptTest(0x8989898989898989, 0x207022C25741C7E3) == 0x8989898989898989);
    EXPECT_TRUE(desEncryptTest(0x8A8A8A8A8A8A8A8A, 0x79D2F69FD2F70B50) == 0x8A8A8A8A8A8A8A8A);
    EXPECT_TRUE(desEncryptTest(0x8B8B8B8B8B8B8B8B, 0x106EA88FDBDF6269) == 0x8B8B8B8B8B8B8B8B);
    EXPECT_TRUE(desEncryptTest(0x8C8C8C8C8C8C8C8C, 0xAE6744B747A26F8C) == 0x8C8C8C8C8C8C8C8C);
    EXPECT_TRUE(desEncryptTest(0x8D8D8D8D8D8D8D8D, 0x2447BF50EAC2BD23) == 0x8D8D8D8D8D8D8D8D);
    EXPECT_TRUE(desEncryptTest(0x8E8E8E8E8E8E8E8E, 0x764242C21FCE1129) == 0x8E8E8E8E8E8E8E8E);
    EXPECT_TRUE(desEncryptTest(0x8F8F8F8F8F8F8F8F, 0x1B5E73E3DB140446) == 0x8F8F8F8F8F8F8F8F);
    EXPECT_TRUE(desEncryptTest(0x9090909090909090, 0x3DBEFA1CC1E7B009) == 0x9090909090909090);
    EXPECT_TRUE(desEncryptTest(0x9191919191919191, 0x81717E9877392A77) == 0x9191919191919191);
    EXPECT_TRUE(desEncryptTest(0x9292929292929292, 0xDBDF4995EFAA3F16) == 0x9292929292929292);
    EXPECT_TRUE(desEncryptTest(0x9393939393939393, 0xED4B3485B3418984) == 0x9393939393939393);
    EXPECT_TRUE(desEncryptTest(0x9494949494949494, 0xC84E74C6F9454C57) == 0x9494949494949494);
    EXPECT_TRUE(desEncryptTest(0x9595959595959595, 0x92C0CE3888715275) == 0x9595959595959595);
    EXPECT_TRUE(desEncryptTest(0x9696969696969696, 0x7084F1526B1C65EC) == 0x9696969696969696);
    EXPECT_TRUE(desEncryptTest(0x9797979797979797, 0x84C3F0B1CB062E16) == 0x9797979797979797);
    EXPECT_TRUE(desEncryptTest(0x9898989898989898, 0x7D0704AEBFFEB47A) == 0x9898989898989898);
    EXPECT_TRUE(desEncryptTest(0x9999999999999999, 0xD631ED501569F48F) == 0x9999999999999999);
    EXPECT_TRUE(desEncryptTest(0x9A9A9A9A9A9A9A9A, 0x420435C66146CD5F) == 0x9A9A9A9A9A9A9A9A);
    EXPECT_TRUE(desEncryptTest(0x9B9B9B9B9B9B9B9B, 0xE2C00E635DF72D4D) == 0x9B9B9B9B9B9B9B9B);
    EXPECT_TRUE(desEncryptTest(0x9C9C9C9C9C9C9C9C, 0x830BFFDA14CD4990) == 0x9C9C9C9C9C9C9C9C);
    EXPECT_TRUE(desEncryptTest(0x9D9D9D9D9D9D9D9D, 0xA054F17BC391A456) == 0x9D9D9D9D9D9D9D9D);
    EXPECT_TRUE(desEncryptTest(0x9E9E9E9E9E9E9E9E, 0x081BA7058F7E4182) == 0x9E9E9E9E9E9E9E9E);
    EXPECT_TRUE(desEncryptTest(0x9F9F9F9F9F9F9F9F, 0x350CDEE58F869F29) == 0x9F9F9F9F9F9F9F9F);
    EXPECT_TRUE(desEncryptTest(0xA0A0A0A0A0A0A0A0, 0x69F52590FDD1CFE6) == 0xA0A0A0A0A0A0A0A0);
    EXPECT_TRUE(desEncryptTest(0xA1A1A1A1A1A1A1A1, 0xEADC79DB2928CEDE) == 0xA1A1A1A1A1A1A1A1);
    EXPECT_TRUE(desEncryptTest(0xA2A2A2A2A2A2A2A2, 0xCFD21BE2051AF3C1) == 0xA2A2A2A2A2A2A2A2);
    EXPECT_TRUE(desEncryptTest(0xA3A3A3A3A3A3A3A3, 0x9162B00621F7552E) == 0xA3A3A3A3A3A3A3A3);
    EXPECT_TRUE(desEncryptTest(0xA4A4A4A4A4A4A4A4, 0x755CC8D2B5B30AB2) == 0xA4A4A4A4A4A4A4A4);
    EXPECT_TRUE(desEncryptTest(0xA5A5A5A5A5A5A5A5, 0x712B05A20F484556) == 0xA5A5A5A5A5A5A5A5);
    EXPECT_TRUE(desEncryptTest(0xA6A6A6A6A6A6A6A6, 0x11DE2BCE0CB1765A) == 0xA6A6A6A6A6A6A6A6);
    EXPECT_TRUE(desEncryptTest(0xA7A7A7A7A7A7A7A7, 0x77C2E34A9705B509) == 0xA7A7A7A7A7A7A7A7);
    EXPECT_TRUE(desEncryptTest(0xA8A8A8A8A8A8A8A8, 0x5E8CE3AA5B04E4ED) == 0xA8A8A8A8A8A8A8A8);
    EXPECT_TRUE(desEncryptTest(0xA9A9A9A9A9A9A9A9, 0xAEEEA13B14221EB1) == 0xA9A9A9A9A9A9A9A9);
    EXPECT_TRUE(desEncryptTest(0xAAAAAAAAAAAAAAAA, 0xD84215387B7F9E3D) == 0xAAAAAAAAAAAAAAAA);
    EXPECT_TRUE(desEncryptTest(0xABABABABABABABAB, 0x239BB18590559BB9) == 0xABABABABABABABAB);
    EXPECT_TRUE(desEncryptTest(0xACACACACACACACAC, 0xF06EE876D610B55E) == 0xACACACACACACACAC);
    EXPECT_TRUE(desEncryptTest(0xADADADADADADADAD, 0xBE33DB8A9F9FA4F4) == 0xADADADADADADADAD);
    EXPECT_TRUE(desEncryptTest(0xAEAEAEAEAEAEAEAE, 0x7702DC93BE4C44AE) == 0xAEAEAEAEAEAEAEAE);
    EXPECT_TRUE(desEncryptTest(0xAFAFAFAFAFAFAFAF, 0xA665A329D5F92FD8) == 0xAFAFAFAFAFAFAFAF);
    EXPECT_TRUE(desEncryptTest(0xB0B0B0B0B0B0B0B0, 0x3EBE6668C7E3825C) == 0xB0B0B0B0B0B0B0B0);
    EXPECT_TRUE(desEncryptTest(0xB1B1B1B1B1B1B1B1, 0x98B9B272A5D7DD30) == 0xB1B1B1B1B1B1B1B1);
    EXPECT_TRUE(desEncryptTest(0xB2B2B2B2B2B2B2B2, 0x1B6EE5949A857941) == 0xB2B2B2B2B2B2B2B2);
    EXPECT_TRUE(desEncryptTest(0xB3B3B3B3B3B3B3B3, 0xE06BBD15D9A348B6) == 0xB3B3B3B3B3B3B3B3);
    EXPECT_TRUE(desEncryptTest(0xB4B4B4B4B4B4B4B4, 0x2514F3336063FD58) == 0xB4B4B4B4B4B4B4B4);
    EXPECT_TRUE(desEncryptTest(0xB5B5B5B5B5B5B5B5, 0xE9FBBDA6090110D5) == 0xB5B5B5B5B5B5B5B5);
    EXPECT_TRUE(desEncryptTest(0xB6B6B6B6B6B6B6B6, 0x7C7D63003CD31264) == 0xB6B6B6B6B6B6B6B6);
    EXPECT_TRUE(desEncryptTest(0xB7B7B7B7B7B7B7B7, 0x78EB2BB35382F2EB) == 0xB7B7B7B7B7B7B7B7);
    EXPECT_TRUE(desEncryptTest(0xB8B8B8B8B8B8B8B8, 0x90AF1E7256FBA0DE) == 0xB8B8B8B8B8B8B8B8);
    EXPECT_TRUE(desEncryptTest(0xB9B9B9B9B9B9B9B9, 0xBFB8EB6467ABE17B) == 0xB9B9B9B9B9B9B9B9);
    EXPECT_TRUE(desEncryptTest(0xBABABABABABABABA, 0x33CC9711C22EF579) == 0xBABABABABABABABA);
    EXPECT_TRUE(desEncryptTest(0xBBBBBBBBBBBBBBBB, 0xCFF046B6EC4F6260) == 0xBBBBBBBBBBBBBBBB);
    EXPECT_TRUE(desEncryptTest(0xBCBCBCBCBCBCBCBC, 0xBFC1B068D95BC1D4) == 0xBCBCBCBCBCBCBCBC);
    EXPECT_TRUE(desEncryptTest(0xBDBDBDBDBDBDBDBD, 0xD0E854C3B10B8312) == 0xBDBDBDBDBDBDBDBD);
    EXPECT_TRUE(desEncryptTest(0xBEBEBEBEBEBEBEBE, 0x3FDCFE744AF68C20) == 0xBEBEBEBEBEBEBEBE);
    EXPECT_TRUE(desEncryptTest(0xBFBFBFBFBFBFBFBF, 0x025E5153BEFC4138) == 0xBFBFBFBFBFBFBFBF);
    EXPECT_TRUE(desEncryptTest(0xC0C0C0C0C0C0C0C0, 0xB032ED00E5F0B7D7) == 0xC0C0C0C0C0C0C0C0);
    EXPECT_TRUE(desEncryptTest(0xC1C1C1C1C1C1C1C1, 0x1E1D46D413849125) == 0xC1C1C1C1C1C1C1C1);
    EXPECT_TRUE(desEncryptTest(0xC2C2C2C2C2C2C2C2, 0x690713E6383FF096) == 0xC2C2C2C2C2C2C2C2);
    EXPECT_TRUE(desEncryptTest(0xC3C3C3C3C3C3C3C3, 0xD6F223FF4504093F) == 0xC3C3C3C3C3C3C3C3);
    EXPECT_TRUE(desEncryptTest(0xC4C4C4C4C4C4C4C4, 0x48E07C763CD06D71) == 0xC4C4C4C4C4C4C4C4);
    EXPECT_TRUE(desEncryptTest(0xC5C5C5C5C5C5C5C5, 0xBD7C6AC98EA824E7) == 0xC5C5C5C5C5C5C5C5);
    EXPECT_TRUE(desEncryptTest(0xC6C6C6C6C6C6C6C6, 0x1909291A23350450) == 0xC6C6C6C6C6C6C6C6);
    EXPECT_TRUE(desEncryptTest(0xC7C7C7C7C7C7C7C7, 0x480F8B34F62DE678) == 0xC7C7C7C7C7C7C7C7);
    EXPECT_TRUE(desEncryptTest(0xC8C8C8C8C8C8C8C8, 0x4AC2A75E3528679B) == 0xC8C8C8C8C8C8C8C8);
    EXPECT_TRUE(desEncryptTest(0xC9C9C9C9C9C9C9C9, 0x3F1568A5E99DEF8C) == 0xC9C9C9C9C9C9C9C9);
    EXPECT_TRUE(desEncryptTest(0xCACACACACACACACA, 0x40414B449374572C) == 0xCACACACACACACACA);
    EXPECT_TRUE(desEncryptTest(0xCBCBCBCBCBCBCBCB, 0xF7925D5B97E64D13) == 0xCBCBCBCBCBCBCBCB);
    EXPECT_TRUE(desEncryptTest(0xCCCCCCCCCCCCCCCC, 0xE64959F80B628140) == 0xCCCCCCCCCCCCCCCC);
    EXPECT_TRUE(desEncryptTest(0xCDCDCDCDCDCDCDCD, 0x248E0D06FB31BB98) == 0xCDCDCDCDCDCDCDCD);
    EXPECT_TRUE(desEncryptTest(0xCECECECECECECECE, 0x92F58133675FE659) == 0xCECECECECECECECE);
    EXPECT_TRUE(desEncryptTest(0xCFCFCFCFCFCFCFCF, 0xCCA53A1AB55B3A05) == 0xCFCFCFCFCFCFCFCF);
    EXPECT_TRUE(desEncryptTest(0xD0D0D0D0D0D0D0D0, 0x8066E3CA18E0726A) == 0xD0D0D0D0D0D0D0D0);
    EXPECT_TRUE(desEncryptTest(0xD1D1D1D1D1D1D1D1, 0x9A610E9161003E92) == 0xD1D1D1D1D1D1D1D1);
    EXPECT_TRUE(desEncryptTest(0xD2D2D2D2D2D2D2D2, 0x9F10AB312F9C1153) == 0xD2D2D2D2D2D2D2D2);
    EXPECT_TRUE(desEncryptTest(0xD3D3D3D3D3D3D3D3, 0x5E55536492C254F5) == 0xD3D3D3D3D3D3D3D3);
    EXPECT_TRUE(desEncryptTest(0xD4D4D4D4D4D4D4D4, 0x2EC41BB94EAC683F) == 0xD4D4D4D4D4D4D4D4);
    EXPECT_TRUE(desEncryptTest(0xD5D5D5D5D5D5D5D5, 0xE6264B3CFA54A53B) == 0xD5D5D5D5D5D5D5D5);
    EXPECT_TRUE(desEncryptTest(0xD6D6D6D6D6D6D6D6, 0x9B0FE80CA5C0AF2E) == 0xD6D6D6D6D6D6D6D6);
    EXPECT_TRUE(desEncryptTest(0xD7D7D7D7D7D7D7D7, 0x9F99107A00E075B9) == 0xD7D7D7D7D7D7D7D7);
    EXPECT_TRUE(desEncryptTest(0xD8D8D8D8D8D8D8D8, 0xEE5A79323EA0B49D) == 0xD8D8D8D8D8D8D8D8);
    EXPECT_TRUE(desEncryptTest(0xD9D9D9D9D9D9D9D9, 0x57D818D32E7BAAA1) == 0xD9D9D9D9D9D9D9D9);
    EXPECT_TRUE(desEncryptTest(0xDADADADADADADADA, 0x2372BA28AE804A73) == 0xDADADADADADADADA);
    EXPECT_TRUE(desEncryptTest(0xDBDBDBDBDBDBDBDB, 0x370FD75C119F4D76) == 0xDBDBDBDBDBDBDBDB);
    EXPECT_TRUE(desEncryptTest(0xDCDCDCDCDCDCDCDC, 0x70ADE48AB7C5F46B) == 0xDCDCDCDCDCDCDCDC);
    EXPECT_TRUE(desEncryptTest(0xDDDDDDDDDDDDDDDD, 0x2EFA06CFEF4C490A) == 0xDDDDDDDDDDDDDDDD);
    EXPECT_TRUE(desEncryptTest(0xDEDEDEDEDEDEDEDE, 0x57F4D40141EF5B25) == 0xDEDEDEDEDEDEDEDE);
    EXPECT_TRUE(desEncryptTest(0xDFDFDFDFDFDFDFDF, 0x6F8C38686FCF9082) == 0xDFDFDFDFDFDFDFDF);
    EXPECT_TRUE(desEncryptTest(0xE0E0E0E0E0E0E0E0, 0x9E4EBA2683B6EADC) == 0xE0E0E0E0E0E0E0E0);
    EXPECT_TRUE(desEncryptTest(0xE1E1E1E1E1E1E1E1, 0x37FBF97B5DF82E4A) == 0xE1E1E1E1E1E1E1E1);
    EXPECT_TRUE(desEncryptTest(0xE2E2E2E2E2E2E2E2, 0xF8605C8127F45F9B) == 0xE2E2E2E2E2E2E2E2);
    EXPECT_TRUE(desEncryptTest(0xE3E3E3E3E3E3E3E3, 0xCFE89CC047E6836A) == 0xE3E3E3E3E3E3E3E3);
    EXPECT_TRUE(desEncryptTest(0xE4E4E4E4E4E4E4E4, 0x7060B673459206F7) == 0xE4E4E4E4E4E4E4E4);
    EXPECT_TRUE(desEncryptTest(0xE5E5E5E5E5E5E5E5, 0x49D3014B922E7A88) == 0xE5E5E5E5E5E5E5E5);
    EXPECT_TRUE(desEncryptTest(0xE6E6E6E6E6E6E6E6, 0x638146A34E7DDCC1) == 0xE6E6E6E6E6E6E6E6);
    EXPECT_TRUE(desEncryptTest(0xE7E7E7E7E7E7E7E7, 0xD106D7199C6791E3) == 0xE7E7E7E7E7E7E7E7);
    EXPECT_TRUE(desEncryptTest(0xE8E8E8E8E8E8E8E8, 0x9B00500449F74FFD) == 0xE8E8E8E8E8E8E8E8);
    EXPECT_TRUE(desEncryptTest(0xE9E9E9E9E9E9E9E9, 0xAAF04E5AAF85B612) == 0xE9E9E9E9E9E9E9E9);
    EXPECT_TRUE(desEncryptTest(0xEAEAEAEAEAEAEAEA, 0xAC4B251F989E005E) == 0xEAEAEAEAEAEAEAEA);
    EXPECT_TRUE(desEncryptTest(0xEBEBEBEBEBEBEBEB, 0xE1A6F9B0015E6E10) == 0xEBEBEBEBEBEBEBEB);
    EXPECT_TRUE(desEncryptTest(0xECECECECECECECEC, 0xE288627548617610) == 0xECECECECECECECEC);
    EXPECT_TRUE(desEncryptTest(0xEDEDEDEDEDEDEDED, 0x5D0975698BF1C0D2) == 0xEDEDEDEDEDEDEDED);
    EXPECT_TRUE(desEncryptTest(0xEEEEEEEEEEEEEEEE, 0xDC84DCFB3C6C2C53) == 0xEEEEEEEEEEEEEEEE);
    EXPECT_TRUE(desEncryptTest(0xEFEFEFEFEFEFEFEF, 0x4C89378B1906782F) == 0xEFEFEFEFEFEFEFEF);
    EXPECT_TRUE(desEncryptTest(0xF0F0F0F0F0F0F0F0, 0xA8FA85D47AC98412) == 0xF0F0F0F0F0F0F0F0);
    EXPECT_TRUE(desEncryptTest(0xF1F1F1F1F1F1F1F1, 0x0E123A4E06709CEC) == 0xF1F1F1F1F1F1F1F1);
    EXPECT_TRUE(desEncryptTest(0xF2F2F2F2F2F2F2F2, 0xEB629B6D5F27F611) == 0xF2F2F2F2F2F2F2F2);
    EXPECT_TRUE(desEncryptTest(0xF3F3F3F3F3F3F3F3, 0x6066A70C1D898158) == 0xF3F3F3F3F3F3F3F3);
    EXPECT_TRUE(desEncryptTest(0xF4F4F4F4F4F4F4F4, 0x4A52E373B669A335) == 0xF4F4F4F4F4F4F4F4);
    EXPECT_TRUE(desEncryptTest(0xF5F5F5F5F5F5F5F5, 0x3197EEEE45C484EE) == 0xF5F5F5F5F5F5F5F5);
    EXPECT_TRUE(desEncryptTest(0xF6F6F6F6F6F6F6F6, 0xAEEF1A655138CCA4) == 0xF6F6F6F6F6F6F6F6);
    EXPECT_TRUE(desEncryptTest(0xF7F7F7F7F7F7F7F7, 0x26CD7B8BBA25B027) == 0xF7F7F7F7F7F7F7F7);
    EXPECT_TRUE(desEncryptTest(0xF8F8F8F8F8F8F8F8, 0x7200565F4D0DAB74) == 0xF8F8F8F8F8F8F8F8);
    EXPECT_TRUE(desEncryptTest(0xF9F9F9F9F9F9F9F9, 0x5510622EE218BAB9) == 0xF9F9F9F9F9F9F9F9);
    EXPECT_TRUE(desEncryptTest(0xFAFAFAFAFAFAFAFA, 0xDA9896ABAD6FCE34) == 0xFAFAFAFAFAFAFAFA);
    EXPECT_TRUE(desEncryptTest(0xFBFBFBFBFBFBFBFB, 0x766E3F3B730F507E) == 0xFBFBFBFBFBFBFBFB);
    EXPECT_TRUE(desEncryptTest(0xFCFCFCFCFCFCFCFC, 0x6E738510076C52AE) == 0xFCFCFCFCFCFCFCFC);
    EXPECT_TRUE(desEncryptTest(0xFDFDFDFDFDFDFDFD, 0x0F6059C33205D452) == 0xFDFDFDFDFDFDFDFD);
    EXPECT_TRUE(desEncryptTest(0xFEFEFEFEFEFEFEFE, 0x66B2B23EA84693AD) == 0xFEFEFEFEFEFEFEFE);
    EXPECT_TRUE(desEncryptTest(0xFFFFFFFFFFFFFFFF, 0x7359B2163E4EDC58) == 0xFFFFFFFFFFFFFFFF);
    EXPECT_TRUE(desEncryptTest(0x0001020304050607, 0x41AD068548809D02) == 0x0011223344556677);
    EXPECT_TRUE(desEncryptTest(0x2BD6459F82C5B300, 0xB10F843097A0F932) == 0xEA024714AD5C4D84);
}
